Faits: A. Le 9 octobre 2001, A._ a fait l'objet d'une décision d'hospitalisation urgente non volontaire en milieu psychiatrique, prise par le Dr B._. Il a été interné trois jours à la clinique D._. Après sa sortie, il a dénoncé cette décision à la Commission de surveillance des activités médicales. Il a aussi déposé une plainte pénale contre le Dr B._, pour enlèvement et séquestration. Par décision du 17 février 2003, confirmée par la Chambre d'accusation le 12 mars suivant, le Procureur général du canton de Genève a classé cette plainte, faute de prévention suffisante. B. Le groupement "Z._" s'est intéressé au cas de A._. Le 6 mai 2005, son président, X._, accompagné d'une dizaine d'adhérents, a manifesté devant le Palais de Justice de Genève et distribué aux passants des tracts que X._ avait rédigés dans les termes suivants: "Inouï : une privation de liberté impunie ! Citoyennes, citoyens, Le «médecin» B._ (...) a ordonné l'internement à la clinique D._ d'un homme en parfaite santé physique et psychique, de plus sans jamais avoir rencontré cette personne, et moyennant un pamphlet (désigné à tort comme «certificat médical»)! La victime a été forcée par 2 agents Securitas à monter dans une ambulance, où l'attendait le «médecin» C._ (...) qui, aidée par un tiers et sans lui adresser la parole, lui a descendu les pantalons et lui a administré une injection. B._ a décrit l'état psychique de sa victime selon un modèle en usage dans les manuels de psychiatrie. Il s'agit de mensonges purs et durs par rapport à la personne concernée. B._ est un fieffé menteur ; il a abusé de son pouvoir. Ce délit grave de privation de liberté a fait basculer le destin d'un couple. Les conséquences en ont été tragiques (voir notre site, rubrique ...). Après sa libération de cette incarcération illégale, la victime a déposé une plainte pénale contre son tortionnaire B._ pour abus de pouvoir. En effet, priver quelqu'un de sa liberté, en abusant de son autorité, est le cumul d'au moins 2 crimes. Selon le code pénal suisse, une réclusion ou un emprisonnement attendent le délinquant. Hélas, le Procureur général, E._, a refusé 2 fois de suite d'ouvrir une enquête. Il faut rappeler qu'une personne lésée a droit d'être entendue, et que l'abus de pouvoir se poursuit d'office. De par sa fonction, E._ a l'obligation d'appliquer la loi. Seule une sanction exemplaire préviendra de futurs dérapages et répétitions d'injustice. Nous exigeons que le Procureur général reçoive incessamment la victime de cet affreux «médecin» B._ pour être entendue. Le crime grave de privation de la liberté ne doit jamais être étouffé." Une fois terminée leur manifestation devant le Palais de Justice, X._ et les adhérents qui l'accompagnaient sont allés distribuer ces tracts au centre administratif de la clinique D._. Puis ils se sont rendus devant les domiciles privés de B._ et de C._, où ils ont proféré leurs allégations en criant et déposé des tracts dans les boîtes aux lettres du voisinage. B._ et C._ ont porté plainte, sans intervenir plus avant dans la procédure. C. Prévenu de diffamation (art. 173 CP), X._ a été renvoyé devant le Tribunal de police du canton de Genève. Par jugement préparatoire du 26 avril 2006, considérant que le but poursuivi par l'accusé était de nuire aux médecins dans la mesure où la justice ne les avait pas punis et qu'un tel but ne saurait être protégé par la loi, le Tribunal de police a refusé à X._ le droit de faire la preuve de la vérité de ses allégations, subsidiairement celle de sa bonne foi. Le recours de droit public que X._ a formé contre ce jugement a été déclaré irrecevable, faute d'être dirigé contre une décision finale ou contre une décision incidente susceptible de causer un préjudice irréparable (arrêt 1P.290/2006 du 3 juillet 2006). Statuant au fond le 13 juin 2006, le Tribunal de police a condamné X._, pour diffamation, à quinze jours d'emprisonnement, peine complémentaire à une précédente. X._ a appelé de cette condamnation, en demandant à pouvoir prouver par témoins la vérité de ses allégations. Par arrêt du 28 janvier 2008, la Chambre pénale de la Cour de justice du canton de Genève a rejeté toutes ses demandes d'audition de témoins et confirmé le jugement de première instance. D. X._ recourt au Tribunal fédéral contre cet arrêt, dont il demande l'annulation. Il assortit son recours d'une demande d'assistance judiciaire et d'une requête d'effet suspensif. Il a retiré le mémoire personnel qu'il a produit parallèlement à celui de son défenseur. La Cour de justice du canton de Genève a renoncé à présenter des observations. Le Procureur général du canton de Genève conclut au rejet du recours.