Un développeur publie plus de 40 ans de code source au moment de prendre sa retraite
(dunfield.themindfactory.com)- À l’occasion de son départ à la retraite, un développeur publie plus de 40 ans de code source accumulé, permettant d’examiner directement d’anciens systèmes, outils et projets personnels
- Le périmètre publié inclut aussi des systèmes d’exploitation et noyaux, comme un noyau multi-processus/tâches pour ARM, un système d’exploitation pour CPU 6809 et un OS ancien datant de l’époque de l’Altair 1980
- Des outils de développement bas niveau sont également fournis, comme Micro-C Compiler, des cross-assembleurs, des désassembleurs, un émulateur 8052 et des débogueurs
- Un large éventail d’utilitaires pour PC est publié, notamment DOSBox, des utilitaires DOS, la synchronisation de fichiers, le traitement ZIP, la création de packages d’installation et un éditeur de texte
- L’ensemble comprend aussi des projets matériels personnels à forte valeur de conservation, comme la radio amateur, une télécommande infrarouge RS-232, Ethernet TTY, le contrôle X10 et un robot destiné à lire 1 500 DVD
Objectif de la publication et documents d’accompagnement
- À l’occasion de son départ à la retraite, il publie plus de 40 ans de code source accumulé correspondant à « ce que j’ai écrit »
- L’objectif est de permettre à d’autres personnes d’utiliser ce code utilement, ou d’en apprendre quelque chose à partir de certaines parties
- La page de publication renvoie aussi vers les documents suivants :
Systèmes d’exploitation, noyaux, machines virtuelles et simulation
- ARMOS : noyau multi-processus/tâches pour ARM
- CUBIX : système d’exploitation pour CPU 6809
- DMF : OS ancien de l’époque de l’Altair 1980
- DVM : Dunfield Virtual Machine
- SIMSYS : systèmes liés à Altair, D6809, H8, Horizon et Mod8
- MONITORS : moniteurs pour plusieurs processeurs embarqués
- 8051ICE : émulateur in-circuit utilisant EMILY
- EMILY52 : émulateur 8052
Compilateurs, assembleurs, débogueurs et outils d’aide au développement
- MICRO-C : Micro-C Compiler
- MCSAMPLE : programmes d’exemple Micro-C
- XASM : cross-assembleur et outils
- DISASM : cross-désassembleur
- DMS : débogueur Dunfield MicroScope
- DESMO : Debug Scripting Monitor
- DDSIDE : Dunfield Development Systems IDE
- BLDTOOL : outil d’aide aux tâches de build
- PUBSRC : outil de maintenance de la section de sources publiques
- HFC : Help File Compiler
- ESL : Extensible Script Language
Utilitaires DOS, fichiers, disques, édition et packaging
- DBBD : disquette de démarrage DosBox
- DBUTIL : utilitaires DosBox
- DD_DBSRC : arborescence du code source DosBox
- DOSUTIL : plusieurs utilitaires DOS
- FDI : Floppy Disk Image
- IMDSRC : ImageDisk
- EDT : éditeur de texte EDT
- ELF : outil d’édition des noms de fichiers longs
- FTOOLS : plusieurs outils pour les opérations sur fichiers
- SYNC : synchronisation de deux arborescences de répertoires
- ZDIR : liste des fichiers dans des ZIP et
touch - MAR : MicroARchiver utilisé pour compresser les fichiers d’installation
- MKPKG : création d’un fichier d’installation en package
.exeunique - ESP : patch de chaînes dans des exécutables
- PT : outil PaperTape
- MICROCAD : très petit programme de dessin CAO
Matériel, communications, contrôle et projets personnels
- DARC : Dunfield Amateur Radio Controller
- HTX242 : contrôle du transceiver radio amateur RS HTX-242
- ICOMCIV : code d’interface ICOM CI-V pour radio amateur
- IR232 : télécommande infrarouge apprenante série RS-232
- ETTY : Ethernet TTY
- SNIFF : sniffer Ethernet
- DLM : Data Line Monitor
- ITS : Interactive Terminal Switch
- DDLINK : DavesDataLink pour transfert de fichiers via COM, LPT et NET
- SERCNCT : bascule entre plusieurs appareils sur un seul port COM
- DBOX : contrôleur de magnétoscope Sony
- DVDROBOT : robot conçu pour lire 1 500 DVD
- EPROM : programmateur EPROM
- 8031DWG : exemple de conception basée sur 8031
- X10CTRL : contrôle d’appareils X10 depuis un PC
- RINGSW : commutateur pour sonnerie distinctive de ligne téléphonique
- PC100 : émulateur de terminal VT-100
- LABTOOLS : plusieurs outils de laboratoire/test
- CAM : projet pour enfants ayant des troubles du développement
- MACMON : surveillance/journalisation de l’utilisation du réseau par les enfants
- TRANZTCL : outil de développement Verifone TRANZ PointOfSale
1 commentaires
Avis de Hacker News
En parcourant DOSUTIL.ZIP, j’ai vraiment apprécié ces programmes C simples et élégants.
Beaucoup n’utilisent qu’une ou deux lignes de
#includestandard en C, et il est aussi impressionnant de voir qu’il n’y a que 24#ifdans 20 000 lignes de code C.L’expérience de lecture de ce genre de base de code a été une source d’inspiration quand j’ai commencé à travailler sur Cosmopolitan Libc.
#if.Cela dit, pour comparer à l’identique, il n’y avait bien que 2 instructions
use.La convention
True=7dansSTYLE.TXTm’a paru inhabituelle.L’idée est qu’en raison de son expérience du code bas niveau et du matériel, pour « minimiser ce qui peut mal tourner au plus bas niveau », il lui arrivait d’utiliser
7au lieu de1pour représenter vrai en C, en s’appuyant sur le fait que0==FALSEet!0==TRUE.C’est un choix réflexe selon lequel une différence de 3 bits vaut mieux qu’une différence d’un seul bit, mais il reconnaît lui-même que c’est idiot, car avec ce genre d’erreur matérielle sur un bit, la majeure partie du système serait de toute façon cassée.
Je me demande si, autrefois, les retournements de bits aléatoires qui perturbaient les conditions étaient fréquents.
Il faudrait décider quelle branche est supposée s’exécuter en sécurité en cas d’échec, compter le nombre de bits de chaque condition et considérer que c’est vrai s’il y a plus de 1 que de 0, ou encore journaliser et avertir l’opérateur qu’un bit a été retourné sans correction d’erreur.
Les codes de détection d’erreurs ont leur utilité, mais décider que vrai vaut 7 ne suffit pas.
Cela dit, j’ai pris plaisir à lire le document de style, et j’ai apprécié qu’il ait tout rendu public. Il y a sûrement quelque part un outil qui conviendra parfaitement à quelqu’un.
0xA5(1010 0101) afin d’envoyer une suite de bits alternés légèrement modifiée.C’est une façon de tester autant de modes de panne que possible en une seule fois.
TRUE=7n’est pas une vraie solution.Pour une variable booléenne, il faudrait gérer à chaque condition
if (var == TRUE),else if (var == FALSE), puis ce qu’il faut faire pour toute autre valeur, et le code de gestion lui-même ne devrait pas planter.En plus, un retournement de bit peut affecter une variable utilisée dans un
switch, une condition commeif (i > 17), un pointeur, l’adresse de retour sur la pile, ou le code lui-même.Au mieux, c’est une solution très partielle, et sa mise en œuvre n’est pas triviale ; il est donc difficile d’y voir une convention standard.
Personnellement, j’aurais probablement utilisé
-1.Je regrette beaucoup de ne pas avoir correctement conservé mon vieux code.
Mon premier programme non trivial, un jeu de Snake, mon premier utilitaire en assembleur, mon premier pilote de périphérique pour imprimante Centronics, et même un calendrier perpétuel écrit en Pascal en une heure pour un devoir universitaire alors que j’avais une sévère gueule de bois : je considérais tout cela comme insignifiant et ne valant pas la peine d’être gardé.
Au final, il ne me reste aucun code antérieur à la fin des années 1990. Les jeunes développeurs devraient bien conserver leur code.
Bien sûr, si ces services « gratuits » ferment, cela devient un problème, donc le self-hosting a aussi son utilité.
À l’époque, les TSR semblaient magiques. Ils sont peut-être quelque part sur des disquettes dans le sous-sol de la maison de ma mère.
Le billet où l’auteur revient sur le fait qu’il a failli mourir en 2019 vaut aussi la lecture : https://dunfield.themindfactory.com/2019.htm
Ses résultats d’examens étaient si mauvais qu’un médecin a refusé de le traiter, de peur qu’il meure à tout moment pendant la consultation.
Pourtant, il est toujours en vie, mène une vie ordinaire et va même courir sur la plage tous les samedis. Ses résultats ne se sont pas améliorés et il est constamment essoufflé, mais il donne l’impression de simplement refuser de mourir.
C’est un peu comme ce que dit le médecin dans le lien : « vous avez l’air d’aller beaucoup mieux que ce qui est écrit dans votre dossier ».
Dans le texte, il y avait un passage où même « prendre ses enfants dans ses bras, dormir dans son propre lit, manger, et faire un peu de travail manuel » lui avait été refusé ; quand mon père ne se remettait pas de sa leucémie et de sa pneumonie et qu’on n’arrivait pas à lui retirer son tube respiratoire, les médecins lui ont tenu exactement le même discours, en insistant sur le fait qu’il garderait un handicap à vie.
Vraiment excellent. Je me suis dit plusieurs fois que j’aimerais faire quelque chose de similaire un jour
C’est un peu comme recevoir un héritage de ses grands-parents. Il y aura sans doute de vrais joyaux et des objets étonnants mêlés au bric-à-brac et aux déchets, mais l’ensemble raconte l’histoire de vraies personnes qui ont vécu une vie riche et intéressante
Quelques moments forts ne peuvent pas rendre pleinement compte de cette vie
Heureusement, il me reste un allocateur mémoire commercial que j’ai créé à la fin des années 90. Il était monothread et ne prenait en charge que Metrowerks CodeWarrior et l’ancien MacOS, mais c’était l’allocateur le plus rapide et le plus exempt de bugs sur Mac
Avec l’arrivée de MacOS X, il est devenu inutile, et je ne sais pas qui cela pourrait intéresser aujourd’hui
Comme je le disais hier, j’ai perdu le code source de Trapeze (https://en.wikipedia.org/wiki/Trapeze_(spreadsheet_program)). Je crois que je n’avais jamais envisagé de conserver mon travail pour le partager plus tard, quand plus personne ne s’en soucierait
Vraiment chouette. Comparé à ce à quoi ressemblera l’historique de mon code plus tard, cela donne l’impression d’un code assez pur
En 2040, mon code montrera probablement les traces de tout un tas de bibliothèques et de frameworks « que plus personne n’utilise aujourd’hui »
Ce n’est pas une question de bien ou de mal, seulement le reflet d’une époque
Les pratiques de développement à la mode aujourd’hui sont étonnamment éphémères et fragiles. Parmi les projets actuels, rares sont ceux qui pourraient tenir 10 ans à l’abandon, et 40 ans encore moins
pip installetnpm installfiniront par ne plus servir à rienÀ mon avis, l’utilitaire le plus influent est ImageDisk
Il a été utilisé pour préserver, à l’aide d’IBM PC, des disquettes provenant de nombreux types d’ordinateurs, et beaucoup d’anciens logiciels présents sur bitsavers.org et archive.org ont été récupérés grâce à cet outil
Dans A Deepness in the Sky de Vernor Vinge, la société humaine de plusieurs millénaires plus tard apparaît comme un monde où presque tous les logiciels ont déjà été écrits, et où le problème consiste seulement à les retrouver
Des programmeurs-archéologues fouillent donc les archives et, si nécessaire, exécutent du code dans un émulateur dans un émulateur dans un émulateur : https://garethrees.org/2013/06/12/archaeology/
Toi aussi, tu as donc contribué à un trésor dont quelqu’un bénéficiera, que ce soit demain ou dans 5 000 ans
Pour plaisanter sur le dernier correctif de bug juste avant la retraite, j’ai voulu regarder micro-cad, mais je tombe sur une 404
URL : https://dunfield.themindfactory.com/dnld/sc/MICROCAD.ZIP
Le comportement attendu est de pouvoir télécharger le fichier
.zipMCSAMPLEExcellent. J’ai accumulé quelques « bibles » personnelles que je garde toujours à portée de main quand je travaille avec certains langages ou sur des tâches d’automatisation, et aussi pas mal de méthodes d’organisation apprises sur HN
Cela dit, elles me semblaient trop personnelles et trop propres à mon processus de réflexion pour que j’aie envisagé de les publier
Mais voir ce genre de ressources m’inspire. C’est une très belle idée, et si possible j’aimerais aussi soutenir financièrement ce projet de retraite en guise de remerciement
Et j’aimerais aussi savoir quelles méthodes d’organisation tu as apprises. Je suis toujours intéressé par les astuces de productivité et les logiciels des autres
Si cela t’intéresse, j’aimerais bien qu’on échange nos fichiers. Je pense que j’aurais beaucoup à apprendre de tes ressources. Mon nom d’utilisateur Gmail est le même que mon nom d’utilisateur HN