5 points par GN⁺ 2023-11-04 | 1 commentaires | Partager sur WhatsApp
  • À 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 .exe unique
  • 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

 
GN⁺ 2023-11-04
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 #include standard en C, et il est aussi impressionnant de voir qu’il n’y a que 24 #if dans 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.

    • Quand il n’y a qu’une seule cible de build, on peut fortement réduire le nombre de macros #if.
    • Les anciens compilateurs C laissaient passer toutes sortes d’erreurs qu’un compilateur C moderne détecterait correctement.
    • Côté Rust, j’ai écrit un simple listener HTTP avec une seule route, et Cargo a ramené environ 105 dépendances pour le builder.
      Cela dit, pour comparer à l’identique, il n’y avait bien que 2 instructions use.
    • À l’inverse, il existe aussi en C une table de hachage implémentée uniquement avec des macros. C’est plutôt chouette : https://troydhanson.github.io/uthash/
  • La convention True=7 dans STYLE.TXT m’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 7 au lieu de 1 pour représenter vrai en C, en s’appuyant sur le fait que 0==FALSE et !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.

    • Même si cela arrivait, on ne peut pas considérer toutes les conditions comme des booléens à trois états.
      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.
    • L’auteur reconnaît lui-même que c’est en fait une habitude idiote, et estime même que cela rend l’intention moins claire.
      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.
    • Pour vérifier qu’une ligne de données série fonctionne, on utilise 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.
    • Si l’on en est à s’inquiéter de ce genre de choses, TRUE=7 n’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 comme if (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.
    • Ce n’est pas tant un problème courant qu’un « ça pourrait arriver, donc autant s’en prémunir là où c’est facile ».
      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.

    • Les enfants d’aujourd’hui utilisent Git et plusieurs plateformes d’hébergement, donc le code disparaît rarement ; de ce point de vue, ce problème touchera sans doute surtout notre génération.
      Bien sûr, si ces services « gratuits » ferment, cela devient un problème, donc le self-hosting a aussi son utilité.
    • Il me reste beaucoup de vieux code, mais il est tellement embarrassant que je n’ai pas envie de le revoir.
    • Pareil pour moi. J’avais aussi créé un tableur DOS, avec des graphiques modeX et des formules, ainsi que quelques jeux et quelques virus.
      À 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

    • C’était intense. Cela m’a rappelé mon beau-père, qui a eu une crise cardiaque en 2015 et dont le cœur a été endommagé à 90 %.
      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 ».
    • Je me demande pourquoi les médecins font ça.
      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.
    • Étrangement, cela me fait penser à The Shadow Out of Time de H. P. Lovecraft.
    • C’est sombre, mais au bout du compte cela ressemble à une happy end.
  • 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

    • Pourquoi ne le faire qu’après la retraite ? Pourquoi pas dès maintenant ?
    • J’aurais aimé avoir gardé une partie de ce que j’ai créé en 40 ans de programmation, mais à chaque fois que je changeais de poste, je laissais tout derrière moi
      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

    • Si tu ne conserves pas toi-même ces dépendances, il se peut que plus personne ne puisse lire correctement le code ni le compiler plus tard
      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
    • Tous ces pip install et npm install finiront 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

    • Les ingénieurs fans de Vinge aiment particulièrement le passage où l’on pense souvent que le calendrier moderne, c’est-à-dire celui d’un futur lointain, est fondé sur le premier alunissage humain, alors qu’en réalité il est basé sur l’Unix Epoch
  • 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 .zip

    • Il semble que tout soit inclus dans le zip MCSAMPLE
    • Je suis tombé sur la même 404. Les programmes de CAO d’origine ne sont pas nombreux, donc j’aimerais vraiment voir celui-ci
  • Excellent. 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

    • Je me demande ce que tu entends exactement ici par « bibles »
      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
    • Moi aussi, j’ai pas mal de bibles de ce genre
      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