La vie secrète de WindowsWindows 95 débranché

Raymond Chen

Bien que les programmes 32 bits pour Windows® 95 pussent utiliser un compilateur 32 bits ordinaire et que les programmes 16 bits eussent été en mesure d'utiliser un compilateur 16 bits ordinaire, Windows 95 lui-même avait besoin d'un compilateur spécial capable de comprendre les univers 32 bits et 16 bits et de les rapprocher. Windows 95 avait également besoin d'un éditeur de liens personnalisé qui comprenne comment coller ces deux types de code ensemble, et d'un éditeur de liens personnalisé pour VxDs (le format de pilote pour Windows 95).

L'équipe de Windows 95 comptait sur la division des langages et outils pour fournir ces compilateurs et éditeurs de liens spéciaux. Je suis sûr que la division de langages a trouvé cette requête étrange : « Vous voulez que nous écrivions un compilateur qui fasse X, Y, et Z et qui sera utilisé pour compiler uniquement deux DLL dans toute sa vie » ? C'est vrai. Mais il s'agissait, après tout, de deux DLL assez importantes.

Malgré l'absurdité apparente de la requête, la division des langages et outils a rempli sa tâche, et le compilateur et l'éditeur de liens extrêmement spécialisés sont devenus des éléments à part entière du processus de construction de Windows 95. Bien sûr, le compilateur n'a pas immédiatement pris sa forme définitive. L'équipe Windows a reçu une version préliminaire, puis des mises à jour périodiques à mesure que de nouvelles optimisations étaient implémentées les bogues corrigés.

Un jour, la construction de Windows 95 a subitement commencé à ralentir considérablement. Un fichier dont la liaison prenait quelques secondes prenait brusquement plusieurs minutes. Le fichier était toujours généré correctement, mais cela prenait une éternité. Et ce n'était pas juste sur la machine d'un seul développeur ; le problème a frappé tous les membres de l'équipe. Notre code avait-il soudain rencontré un cas pathologique dans l'éditeur de liens ? Étions-nous tombés sur un bogue de l'éditeur de liens ?

Après un peu de débogage, nous avons identifié la source du problème. La version la plus récente de l'éditeur de liens contenait un code de diagnostic que les collègues de l'équipe des langages avaient oublié de supprimer avant de transmettre le code à l'équipe Windows. Ce code de diagnostic enregistrait ses résultats dans un fichier qui était stocké sur un ordinateur qui se trouvait dans le bureau d'un membre de l'équipe du compilateur. Et l'ordinateur était éteint. (Ceci me fait penser à Leslie Lamport, et à sa fameuse description du système distribué comme étant un système où vous ne pouvez pas faire votre travail parce qu'un ordinateur dont vous n'avez jamais entendu parler est en panne).

fig84a.gif

Cette version de l'éditeur de liens avait tourné tranquillement pendant des semaines. Chaque fois que quelqu'un essayait de lier un VxD pendant la création de Windows 95, une mise à jour était apportée au fichier stocké dans cet ordinateur de développement. Tant que cet ordinateur était resté allumé et connecté au réseau, personne n'avait jamais rien remarqué. Mais un jour, cet ordinateur avait été éteint et tout avait commencé à ralentir considérablement.

Une fois le problème identifié, il n'a pas fallu très longtemps à l'équipe du compilateur pour fournir à l'équipe Windows un correctif qui supprimait le code de diagnostic de l'éditeur de liens.

Cette histoire à une chute différente en fonction de qui la raconte. Lorsque je raconte l'histoire, la chute est « Et ce développeur du compilateur a plus tard été muté à l'équipe de Windows et a fini par devenir mon chef ». Je me suis souvent amusé à raconter cette histoire pour le taquiner gentiment.

Cependant, si mon chef raconte l'histoire, la chute est très différente : « Et il se fait que je n'avais même pas écrit ce code de diagnostic. C'était un de mes collègues, qui avait décidé qu'au lieu d'encombrer son propre ordinateur des informations de diagnostic, il encombrerait le mien ! »

Le site Web de Raymond Chen, The Old New Thing, et son livre du même titre traitent de l’historique de Windows et de la programmation Win32. Son ADN est rempli de code mort.