1. Génèse
À l'Université de Berkeley, on pressent que le succès de l'implémentation de la première pile TCP/IP dans 4.3BSD aboutira tôt ou tard à la dissolution de la CSRG (Computer Systems Research Group) [1]. Ainsi, Bill Jolitz (voir GLMF 114) et quelques apôtres s'affairent à préparer le futur et travaillent d'arrache-pied sur un portage de 4.3BSD Reno vers l'architecture i386. En 1991, une version inachevée de ce portage voit le jour : elle s'appellera Net/2 et servira de base de travail au premier UNIX Libre utilisable, 386BSD ainsi qu'à BSD/386 de la société BSDI, future BSDi, société créée par d'anciens membres légendaires de la CSRG.
Au milieu de l'année 1992, il existe deux systèmes BSD sur architecture Intel. Le premier, BSD/386, plus tard nommé BSD/OS, est un produit commercial issu de la société BSDi ; c'est un système utilisable et bien moins cher que le rival UNIX System V vendu par AT&T. Le second, 386BSD, est le tout premier UNIX libre totalement fonctionnel (comprendre : pas uniquement un noyau) maintenu par Bill Jolitz, qui quitta la société BSDi avec pertes et fracas lorsqu'il comprit que l'objectif de celle-ci était uniquement de vendre le système BSD/386 sans possibilité de diffusion gratuite et sans support.
Seulement voilà, 386BSD est un échec. Rares sont ceux qui réussissent simplement à l'installer, et Jolitz est réfractaire à l'inclusion de patchkits proposés par quelques groupes d'utilisateurs. Devant la frustration grandissante et les divergences d'opinion des contributeurs de 386BSD et de son auteur, quatre d'entre eux décident de fonder leur propre version du système, leur ambition étant de proposer du code propre et portable. Ces quatre développeurs sont Chris Demetriou, Theo de Raadt, Adam Glass et Charles Hannum. En écho à l'importance grandissante du réseau dans l'informatique, et en raison du modèle distribué et collaboratif de développement, Theo de Raadt propose le nom « NetBSD ».
Dans un mail devenu célèbre [2], Charles Hannum explique que, à ce moment-là, ils jettent les bases de la gestion d'un projet open source, bases qui seront copiées « verbatim » par pratiquement tous les nouveaux projets : gestion des sources sur CVS, site web associé au projet ou encore core group qu'il appelle également « cabale ».
2. 1993, année érotique
Le 21 mars 1993, le premier repository CVS du projet NetBSD voyait le jour et accueillait la toute première release de NetBSD : NetBSD 0.8. Cette release était composée du code de base de 386BSD 0.1, du patchkit-0.2.2 et de quelques pièces manquantes directement issues de Net/2. Pour preuve, on peut lire sur le CVSweb du projet, après avoir choisi la branche patchkit-0-2-2 [3] :
Default branch: MAIN
Current tag: patchkit-0-2-2
Revision 1.1.1.1 / (download) - annotate - [select for diffs] (vendor branch), Sun Mar 21 09:53:37 1993 UTC (16 years, 4 months ago) by cgd
Branch: WFJ-920714, CSRG
CVS Tags: patchkit-0-2-2, WFJ-386bsd-01
Changes since 1.1: +0 -0 lines
Diff to previous 1.1 (colored)
initial import of 386bsd-0.1 sources
Je sais pas pour vous, mais moi, ça me fait des choses.
Le projet était alors officiellement lancé, mais il restait évidemment plusieurs points à adresser et, parmi eux, la problématique liée au conflit entre l'Université de Berkeley et AT&T relative à du code issu de ce dernier et toujours présent dans Lite/2. Il est à noter que ces batailles juridiques ont considérablement ralenti l'évolution des UNIces BSD libres, et que c'est grâce à ces déboires que le système GNU/Linux a pu sortir son épingle du jeu, n'étant pas concerné par ce champ de bataille puisque écrit « from scratch ».
Ce n'est qu'à la fin de l'année 1994, le 8 novembre, que NetBSD 1.0 verra le jour, libéré de toute contrainte juridique, puisque les dernières pièces litigieuses furent resynchronisées avec la première mouture de BSD UNIX libre de tout code issu de la société AT&T, 4.4BSD-Lite. Une liste impressionnante d'ajouts et de correctifs viennent améliorer l'héritier, et on peut lire dans l'annonce officielle de la release [4] :
(traduction libre)
À l'heure actuelle, des versions binaires sont disponibles pour les architectures suivantes :
* Amigas
* PCs de la famille des i386
* quelques Macintoshes basés sur l'architecture m68k
* PC532
* Machines de type SPARCstation (sun4c)
De plus, une version binaire est attendue, mais pas encore prête, pour les stations de travail de la famille HP9000/300.
Bien que l'arbre des sources de NetBSD 1.0 inclut le support pour les stations DEC, quelques modeles de Sun3 et quelques
VAXen, ces portages ne sont pas assez aboutis pour mériter une version binaire complète.
NetBSD est désormais sur les rails et bénéficie en 1993 et 1994 d'une popularité grandissante, amenant grand nombre des actuels gurus du projet à le rejoindre à cette époque (Alistair Crooks, Hubert Feyrer, Luke Mewburn…). C'est également en 1994 que le premier logo NetBSD apparaît, créé par Shawn Mueller. Il s'inspire d'une célèbre photographie de la Seconde Guerre mondiale, Raising the Flag on Iwo Jima. Cela sera plus tard sujet à controverse et aboutira au choix très critiqué du drapeau orange.
En décembre 1994, l'un des clashs les plus connus de l'histoire de l'informatique aboutit à l'éviction de l'un des fondateurs du projet NetBSD : Theo de Raadt. La version officielle [5], un mail du 20 décembre 1994 émis par Adam Glass, explique que l'attitude de plus en plus rude de Theo envers les utilisateurs et développeurs du projet NetBSD n'est plus tolérable et qu'elle endommage l'image du projet. Ainsi, non sans faire de bruit, de Raadt fondera son propre fork basé sur NetBSD 1.0, OpenBSD.
3. T'as grossi un peu non ?
L'année 1995 voit la création de l'organisation officielle qui gèrera administrativement le Projet NetBSD : la Fondation NetBSD (TNF). NetBSD bénéficie d'un statut d'organisation à but non lucratif 501(C)3, similaire à une loi 1901 française. Les membres de la fondation sont les développeurs qui ont un accès en écriture au repository CVS, les membres du board étant élus. NetBSD se structure.
Côté technique, les versions 1.1, 1.2, puis 1.2.1 bénéficient d'importantes améliorations ainsi que de nouvelles architectures. En mai 1997, NetBSD fonctionne officiellement sur 12 architectures différentes. Dans la terminologie du projet, on appelle cela des ports :
- DEC Alpha (NetBSD/alpha) ;
- Amiga (NetBSD/amiga) ;
- Atari (NetBSD/atari) ;
- Les séries HP 9000/300 (NetBSD/hp300) ;
- La famille des PC i386 PC (NetBSD/i386) ;
- Les Macintosh basés sur m68k (NetBSD/mac68k) ;
- Les systèmes MVME basés sur m68k (NetBSD/mvme68k) ;
- PC532 (NetBSD/pc532) ;
- Les stations DEC MIPS (NetBSD/pmax) ;
- Les systèmes Sun SPARC - sun4/sun4c/sun4m (NetBSD/sparc) ;
- La serie Sun 3 (NetBSD/sun3) ;
- Sharp X680x0 (NetBSD/x68k).
Mais, c'est véritablement NetBSD 1.3 qui représente un tournant pour le projet. En effet, en plus de trois nouveaux ports (NetBSD/arm32, NetBSD/vax et NetBSD/x68k), NetBSD 1.3 inclut dans sa base XFree86, mais, surtout, il propose un système de packaging qui va connaître un succès grandissant : pkgsrc.
Rendons à César ce qui lui appartient. Initialement, pkgsrc est un dérivé des ports FreeBSD. Le changement de nom de l'infrastructure n'est lié qu'à l'utilisation différente du terme « port » dans le monde NetBSD. Aussi, puisqu'on trouve dans l'arbre des sources des modules tels que src ou xsrc, il fut décidé d'appeler ce nouveau module pkgsrc, qu'on prononcera donc « package source ».
L'un des créateurs de pkgsrc, Alistair G. Crooks, actuel membre du NetBSD Core Group et président de la Fondation NetBSD, explique dans une interview [6] qu'il pressentait le potentiel d'un système de packaging basé sur des Makefiles, mais qu'il n'en tira réellement profit qu'en 1999. En effet, cette année-là, dans le cadre de son travail, il dut réfléchir à un système de déploiement de packages tierce-partie pour un réseau relativement important composé de machines sous Solaris 2.6. Ainsi, Solaris fut la première plateforme, après NetBSD, à bénéficier de pkgsrc, suivie de près par Linux, puis Mac OS X.
D'un point de vue historique, NetBSD 1.3 importe une partie des derniers travaux de la CSRG qui fut dissoute en 1995 après avoir publié 4.4BSD-Lite2, version totalement libre, non encombrée d'éléments en provenance d'AT&T. Ainsi, plusieurs programmes userland en provenance de la dernière version d'UNIX issue de Berkeley sont ajoutés et certains complétés.
Enfin, NetBSD 1.3 revêt une importance toute particulière à mes yeux, puisque ce fut ma toute première expérience avec ce système, mais, je vous l'accorde, l'intérêt de cet événement est tout à fait relatif :)
4. Vers NetBSD 2.0
Certains indécrottables du Projet disent que NetBSD 1.4 est la meilleure version jamais releasée (certains indécrottables disent que la dernière version stable du noyau Linux est 1.2.13, y'a des râleurs partout). S'il est difficile d'adhérer à cette théorie, force est de constater que NetBSD 1.4 est un système d'une qualité exceptionnelle. On notera en particulier :
- Une plus grande conformité aux standards POSIX et X/Open.
- Intégration des derniers composants issus de 4.4BSD-Lite2.
- Un nouveau système de mémoire virtuelle, UVM, plus propre et plus rapide que l'ancienne VM dérivée de Mach.
- Le support USB : NetBSD a été le premier système à supporter des périphériques USB, ce qui a longtemps été la fierté du canal #NetBSD@IRCnet :).
- RAIDframe, un système de RAID logiciel issu de l'Université de Carnegie Mellon supportant RAID 0, 1, 4 et 5.
- Le fameux wscons(4), pilote générique de console.
NetBSD 1.4 verra trois sous-releases, 1.4.1, 1.4.2 et 1.4.3. Cette dernière sera disponible le 25 novembre 2000 et inclura le premier pilote Wireless, wi(4), déjà écrit par Bill Paul à qui l'on doit une grande partie du framework Wifi des systèmes BSD.
NetBSD 1.5 est la huitième release majeure. Elle voit le jour le 6 décembre 2000. Il s'agit d'une release importante de par le nombre d'éléments cruciaux qui y font leur apparition. Parmi eux, on remarque tout particulièrement :
- la gestion des modules noyau ELF ;
- l'import des piles IPv6 et IPSEC issues du projet KAME ;
- l'import des softupdates écrites par Kirk McKusick du projet FreeBSD ;
- l'import d'OpenSSH ;
- la conversion des scripts de démarrage et d'extinction vers le système rc.d, plus tard importé sur FreeBSD sous le nom de code rcNG ;
- le passage des plates-formes i386 et Sparc du format d'exécutables a.out vers SVR4 ELF.
NetBSD 1.5.1 ajoutera le support des réseaux locaux virtuels de type 802.1Q (VLAN). Les sous-versions 1.5.2 et 1.5.3 apportent quelques améliorations, des pilotes supplémentaires ainsi que de nombreux correctifs.
Le 14 septembre 2002, NetBSD 1.6 est disponible au téléchargement et supporte officiellement 52 architectures différentes, soit soixante-douze familles d'ordinateurs différents. Cette version porte une nouvelle révolution : un environnement complet de cross-compilation piloté par le script build.sh. En bref, il est possible depuis cette version de compiler l'intégralité de son environnement pour une architecture différente de l'architecture sur laquelle la construction a lieu.
Le 14 janvier 2004, Luke Mewburn lance sur netbsd-advocacy@ un concours : trouver un nouveau logo pour le projet NetBSD. Le 30 octobre 2004, l'annonce officielle présente le vainqueur du concours, Grant Bissett, un designer Australien qui remporte le plus de voix avec son « fameux » drapeau orange.
En septembre 2004, Christos Zoulas annonce une petite révolution sur la liste de diffusion tech-kern@ [7] : le format de numérotation des releases doit changer. Désormais, le premier digit de la version représentera la version majeure et le second une release mineure. Ainsi, la prochaine release majeure de NetBSD sera 2.0, les versions correctives de cette dernière seront 2.1, 2.2, etc. et la release suivante sera 3.0. Il propose également de modifier la numérotation des versions current (versions de développement), et de mimer certains autres projets libres. Les versions current seront numérotées selon le format suivant : pendant la version 2.0, current sera nommée 2.99 et se verra affublé d’un digit supplémentaire signifiant une rupture de compatibilité dans l'API. On verra alors des versions 2.99.1, 2.99.2, etc. lorsque 3.0 sera en état stable, current passera alors en 3.99 et ainsi de suite.
Plus de 10 ans après NetBSD 1.0, NetBSD 2.0 est publié le 9 décembre 2004. C'est la 10ème version majeure du système et elle bénéficie de changements profonds, jugez plutôt :
- Parmi les nouvelles plateformes, on note NetBSD/amd64, NetBSD/evbsh5, mais surtout, NetBSD/xen.
- La première implémentation native des threads de type « Scheduler Activations ».
- Les ports NetBSD/i386, NetBSD/amd64, NetBSD/macppc et NetBSD/sparc se voient ajoutés le support SMP (il était temps diront certains).
- Le framework de notification d'événements noyau, kqueue(2).
- Le support de l'ACPI pour les plateformes i386.
- L'import de l'UFS2 de FreeBSD.
- Verified Exec, permettant la vérification d'un hash avant l'exécution d'un binaire.
- XFree86 4.4.0.
Deux versions correctives et une release intermédiaire viendront ajouter le support de quelques pilotes complémentaires, ainsi que de nombreux correctifs.
Dans le registre anecdotes, on retiendra le record du monde de transfert IP réalisé par des chercheurs de l'Université Réseau de Suède (SUNET) [8], soit 69.073 Petabit-mètres par seconde entre l'Université de Technologies Luleå et une machine connectée à un point de présence Sprint à San José aux États-Unis. Les deux machines fonctionnaient sous NetBSD 2.0BETA, choisi en raison de, je cite, « la grande extensibilité du code TCP de NetBSD ».
5. Guerre et paix
NetBSD 3.0 ne portera pas de révolution à proprement parler. On notera cependant le support de Xen 2.0 et l'import de pf(4) issu d'OpenBSD comme alternative à l'ancestral ipf(4). Cette release se fera remarquer par un « événement » qui a eu des conséquences plus néfastes qu'il n'y paraît, le fameux « Grille-pain qui tourne sous NetBSD » [9]. En effet, plusieurs années après cet épisode, et encore aujourd'hui, on peut lire sur certains forums ou certaines listes de diffusion « à part tourner sur un grille-pain, NetBSD ça fait quoi ? ». Paradoxalement, le nombre de pilotes ajoutés à cette version est simplement hors du commun.
NetBSD 3.0 sera suivi de deux versions correctives, puis de NetBSD 3.1, dont l'un des grands atouts sera de supporter Xen 3.0.
L'année 2006 est surtout marquée par un mail retentissant envoyé à netbsd-users@ et dont l'auteur n'est autre que l'un des quatre fondateurs du Projet, Charles M Hannum ayant pour sujet « The future of NetBSD » [2]. Ce mail a eu pour conséquence d'ouvrir de vieilles plaies, et s'il n'est probablement pas objectif, Charles met le feu aux listes de diffusion du Projet. De règlements de comptes mettant en cause la gestion du Projet en diatribes pointant du doigt les relations présumément incestueuses reliant le Projet NetBSD à la société Wasabi, le sujet forke et se répand de fin août 2006 à la mi-septembre.
L'exploration des divers fils de discussion, analyses et autres interviews, chacun reflétant des avis personnels, amène à penser que l'une des causes de cet embrasement réside dans la réorganisation de la Fondation NetBSD qui commença dès 2002 sous l'impulsion d'un nouveau board et qui aboutit entre autres à l'élaboration d'un nouveau contrat entre les développeurs et la fondation. Toujours selon Charles, plusieurs développeurs, dont lui-même, refusent de signer ce nouveau contrat. Les échanges sont argumentés de toute part et il est pratiquement impossible, sans avoir plus d'éléments, de distinguer le vrai du faux.
Notons, pour terminer cet épisode peu glorieux de l'histoire de NetBSD, que, paradoxalement, ce mail a tout de même eu un effet positif sur le Projet ; la plupart des points faibles pointés par M Hannum sont aujourd'hui adressés, et NetBSD semble bénéficier d'un d'intérêt accru, notamment grâce à une meilleure communication et un fonctionnement moins opaque.
6. OH HAÏ, IZ BACK
NetBSD 4.0 débarque le 17 décembre 2007, et avec lui plusieurs « nouveautés » qui manquaient cruellement pour son utilisation sur une machine moderne.
- Côté Wifi, un nombre important de chipsets ont vu leur support ajouté, beaucoup en provenance d'OpenBSD, entre autres grâce à l'efficacité de Damien Bergamini. NetBSD 4.0 voit également arriver dans sa base le framework wpa ainsi qu'hostapd.
- Le support bluetooth(4), d'abord importé de FreeBSD, puis étendu par Iain Hibbert.
- L'import, auquel j'ai modestement participé, du NDISulator de FreeBSD : ce module permettant de charger des pilotes binaires NDIS Sales®©™.
NetBSD 4.0 marque également la fin d'une époque, puisque mon bien-aimé Sendmail a cédé sa place à Postfix dans le système de base.
Une seule release mineure viendra corriger quelques problèmes de sécurité et quelques bugs majeurs, NetBSD 4.0.1.
En 2007, un élément-clé va chambouler l'univers NetBSD. Le 25 juillet, la fondation annonce qu'elle emploie désormais à plein temps un développeur talentueux (c'est le moins qu'on puisse dire) pour la refonte du module de gestion SMP. Andrew Doran, c'est son nom, travaille depuis 1999 pour le Projet. Il va dépoussiérer [9] le système vieux de 15 ans et améliorer ses performances de façon exceptionnelle.
Le 29 avril 2009, NetBSD 5.0, la treizième release majeure du système d'exploitation est fièrement annoncée. Le différentiel entre NetBSD 4.0 et 5.0 représente 7 millions de lignes (!!). Il s'agit de la version qui contient le plus de modifications, et surtout celle qui constitue le bond le plus important de NetBSD. On doit en grande partie cette renaissance grâce au travail titanesque abattu par Andrew.
Comme prévu, la gestion des systèmes multiprocesseurs, mais aussi multicores subit un lifting salvateur, mais ce millésime réserve également de bien bonnes surprises :
- Réécriture du système de multithreading en suivant le modèle 1:1, en lieu et place des Scheduler Activations (modèle M:N).
- Modularisation du scheduler.
- L'excellent WAPBL, système de journalisation pour FFS.
- Une avancée considérable dans le support ACPI. On notera par exemple le fonctionnement sans faille des states 3 et 5.
- L'arrivée (ENFIN) de X.Org qui remplace le vieillissant XFree86.
- L'addition de refuse(3), permettant l'utilisation de modules FUSE grâce à puffs(3).
- L'intégration d'OpenLDAP dans le système de base.
Et encore une liste longue comme le bras d'améliorations, de nouveaux pilotes et de mises à jour.
On se rend compte du chemin parcouru grâce à un benchmark réalisé par Andrew lui-même. Je ne suis pas adepte de ces outils de mesure pour comparer différents systèmes entre eux. Par contre, ils sont d'un grand intérêt pour mesurer l'évolution d'un seul et même système. Le comparatif entre NetBSD 4.0 et 5.0 est sans appel. Jugez plutôt :
Comme on peut le constater sur ce graphe©, la prédictibilité et la linéarité du temps d'exécution d'un nombre croissant de processus sur une machine multicore sous NetBSD 5.0 sont pratiquement parfaites en comparaison du même test sous NetBSD 4.0 :
Dans le même ordre d'idées, le benchmark suivant représente une simulation de charge réalisée à l'aide de MySQL. Le constat est sans appel, alors que, sous NetBSD 5.0, le nombre de transactions par seconde augmente linéairement en fonction du nombre de threads jusqu'à atteindre 4500 transactions par seconde une fois le nombre de threads identique au nombre de cores, le même test révèle un résultat désespérant sous NetBSD 4.0 :
De l'avis de bon nombre de développeurs du projet, NetBSD 5.0 représente non seulement une révolution technique, mais surtout une forme de renaissance. Car, si la prouesse réalisée par les développeurs est remarquable, on doit également un regain d'activité de la fondation à une meilleure visibilité de cette release et une présence « médiatique » plus importante.
À l'heure où j'écris ces lignes, NetBSD 6.0 est en cours de développement sur la branche current 5.99. Bon nombre de nouveautés sont à venir. Voici un aperçu des plus impressionnantes :
- Le support natif du ZFS de Sun, en cours de portage via le Google Summer of Code d'Adam Hamsik, sous l'œil bienveillant d'Andrew Doran (encore lui).
- Le portage de LVM, issu du GSoC 2008 d'Adam Hamsik.
- Un nouveau framework de modules noyau, et, plus concrètement, l'utilisation généralisée des modules pour un plus grand nombre de pilotes
- Le support du framebuffer et un nouveau pilote, genfb(4), permettant d'utiliser les extensions VESA.
- UFS2 par défaut, disparition des softupdates en faveur de WAPBL.
- Le support de piles réseau parallèles.
- Le fameux projet Desktop NetBSD [10], visant à obtenir un bureau NetBSD fonctionnel en moins de 15 minutes d'installation.
Ainsi que de nombreux travaux en cours, notamment via le Google Summer of Code 2009, qui, pour la cinquième année consécutive, fournit une réelle pépinière au Projet NetBSD.
7. s01e02 Spoiler
Comme vous vous en doutez probablement, raconter 18 ans de la vie d'un projet en quelques pages laisse un goût de trop peu, tant l'histoire, que dis-je, l'épopée des UNIces BSD est riche. La lecture des liens cités en référence devrait cependant vous aider à épancher votre soif de connaissance et probablement livrer quelques détails croustillants relatifs aux anecdotes que j'ai volontairement écourtées.
Et après cette introduction historique, nous vous donnons rendez-vous le mois prochain pour une approche plus concrète du système NetBSD, en commençant par le commencement, son installation, sa configuration et son tuning initial ainsi que son utilisation quotidienne.
D'ici là, faites chauffer les machines, virtuelles ou pas.
Références
[1] http://en.wikipedia.org/wiki/Computer_Systems_Research_Group
[2] http://mail-index.netbsd.org/netbsd-users/2006/08/30/0016.html
[3] http://cvsweb.netbsd.org/bsdweb.cgi/src/?only_with_tag=patchkit-0-2-2
[4] http://www.netbsd.org/releases/formal-1.0/NetBSD-1.0.html
[5] http://mail-index.netbsd.org/netbsd-users/1994/12/23/0000.html
[6] http://www.netbsd.org/gallery/10years.html#alcrooks
[7] http://mail-index.netbsd.org/tech-kern/2004/09/30/0020.html
[8] http://bsd.slashdot.org/article.pl?sid=04/05/03/2235255
[9] http://www.embeddedarm.com/software/arm-netbsd-toaster.php
[10] http://www.netbsd.org/~ad/smp/tasks.html
[11] http://wiki.netbsd.se/Desktop_Project