Microsoft publie le code source original de GW-BASIC (1983) : une capsule temporelle pour comprendre la naissance du PC

Microsoft publie le code source original de GW-BASIC (1983) : une capsule temporelle pour comprendre la naissance du PC

La histoire de l’informatique personnelle vient de faire un saut dans le passé en ligne. Microsoft a mis à disposition de la communauté sur GitHub le code source original de l’interpréteur GW-BASIC de 1983, un jalon qui offre, ligne par ligne, un aperçu de la façon dont se construisait le logiciel à l’aube de l’ère du PC. Ce dépôt — publié à des fins historiques et éducatives — a été archivé en mode lecture seule le 16 novembre 2023 et est distribué sous licence MIT. Il ne comprend ni binaires ni scripts de compilation : c’est littéralement une photographie de l’atelier où s’est forgé l’un des BASIC parmi les plus populaires de l’époque MS-DOS.

La déclaration officielle, publiée sur le blog de Microsoft (signé par Rich Turner), souligne la nature du matériel : code 100 % assembleur pour architecture 8088, daté du 10 février 1983, avec des versions spécifiques par processeur et machine, à la mode de l’époque. L’objectif n’est pas de relancer le développement ou d’accepter des pull requests, mais de conserver la mémoire technique d’un langage ayant enseigné la programmation à des millions de personnes.

Ce que contient le dépôt

En ouvrant le dépôt, on trouve une liste de fichiers qui parle d’eux-mêmes : des dizaines de modules .ASM (tels que GWINIT.ASM, GWEVAL.ASM, GWMAIN.ASM, SCNDRV.ASM, GIOKYB.ASM ou GIODSK.ASM), des en-têtes comme BINTRP.H, IBMRES.H et des documents de gouvernance du projet (LICENSE, CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md). Parmi les fichiers les plus descriptifs, on retrouve :

  • GWINIT.ASM et GWMAIN.ASM : initialisation et runtime de l’interpréteur.
  • GWEVAL.ASM : routines d’évaluation et d’exécution des instructions.
  • SCNDRV.ASM / SCNEDT.ASM : interaction avec l’écran et l’éditeur.
  • GIO*.ASM** (clavier, écran, cassette, disquette, port série, imprimante…) : l’entrée/sortie brute du PC XT.
  • MATH1.ASM / MATH2.ASM : arithmétique flottante et routines mathématiques.
  • IBMRES.ASM : ressources spécifiques pour les machines compatibles IBM.

Il n’y a ni C ni Pascal. Pas non plus de Makefile ou de guide de compilation. Le dépôt indique clairement qu’il est publié pour une consultation historique. Son noyau est en assembleur pur, conçu pour que chaque byte et chaque cycle comptent sur des machines avec 32 ou 64 Ko de mémoire et des CPU à quelques MHz.

Pourquoi tout était en assembleur

L’annonce elle-même rappelle un fait souvent oublié : dans les années 70 et au début des années 80, les compilateurs de haut niveau étaient coûteux, rares et peu efficaces pour les micro-ordinateurs domestiques. Si l’on voulait faire tenir un interpréteur BASIC complet dans la mémoire disponible et exploiter au maximum le 8088, il n’y avait pas d’autres options : il fallait programmer en assembleur. Microsoft conservait de fins maîtresses qui étaient ensuite traduites en différentes architectures —8088, 6502, 6809, Z80— avec des outils internes. C’est pourquoi de nombreux fichiers portent l’en-tête “This translation created 10-Feb-83 by Version 4.3”. La société n’a pas libéré cet outil de traduction ISA, rendant la valeur du dépôt surtout documentaire.

Un BASIC avec pedigree : de l’Altair au PC XT

GW-BASIC descend de BASICA (IBM Advanced BASIC), lui-même basé sur le Microsoft BASIC que Bill Gates et Paul Allen ont porté sur le Altair 8800. En pratique, GW-BASIC est devenu la porte d’entrée à la programmation pour de nombreux utilisateurs de MS-DOS 2.0 et du IBM PC/XT (1983). C’était le BASIC « maison » dans d’innombrables clones, coexistait avec d’autres implémentations (QuickBASIC, Turbo BASIC, etc.) et profitait de l’essor de Turbo Pascal (annoncé par Borland en 1983).

Le code source ouvert permet désormais de suivre, instruction par instruction, comment étaient implémentés la console, l’éditeur à l’écran, l’impression, l’entrée par cassette, la gestion des disquettes ou les routines mathématiques. Il montre aussi comment était structuré un interpréteur monolithique, avec sa boucle de lecture-évaluation-exécution (REPL), la gestion des erreurs et la liste de tokens qui donnaient vie à des commandes aussi emblématiques que PRINT, INPUT, IF…THEN, FOR…NEXT, POKE ou PEEK.

Ce que l’ouverture de GW-BASIC apporte à 2025

Pour le lecteur contemporain, GW-BASIC offre au moins trois perspectives complémentaires :

  1. Archéologie de la performance. Comprendre pourquoi chaque byte et chaque instruction comptaient permet d’apprécier l’efficacité et le minimalisme du design. C’est aussi un miroir des tendances actuelles — des langages system comme Rust au retour d’une programmation conscientes de la mémoire.
  2. Pour une pédagogie de bas niveau. Le dépôt sert comme matériel didactique : il montre comment communiquer avec la machine (BIOS, interruptions, mappages vidéo, pilotes clavier et imprimante) sans intermédiaires. Pour les enseignants init allant enfants et jeunes à la programmation — avec le BASIC classique ou ses équivalents modernes —, c’est un pont entre concepts de haut niveau et réalités physiques.
  3. Histoire de produit. Il permet de suivre les enjeux de conception auxquels Microsoft a fait face pour porter un interpréteur sur des machines aux ressources limitées et périphériques très hétérogènes. Il explique aussi pourquoi l’écosystème BASIC a été si omniprésent dans les années 80 : flexibilité, portabilité et un point d’entrée accessible.

Un contexte culturel et technique irremplaçable

Le propre lancement situe le code dans son contexte historique : 1983, année de MS-DOS 2.0, de UNIX System V R1, de BSD 4.2 (avec l’introduction du pseudo-téléscripteur, ancêtre lointain du ConPTY de Windows), du lancement de l’Apple Lisa avec 1 Mo de RAM, de l’Apple IIe à 1 MHz, et d’une industrie expérimentant avec interfaces graphiques, modems et réseaux TCP/IP. Parallèlement, Bjarne Stroustrup progressait sur le premier C++. Le PC n’était pas encore synonyme de Windows ; la ligne de commande était la norme et BASIC, le langage universel.

Comment voir le code aujourd’hui

  • Sans précipitation. Ce n’est pas un projet pour compiler en une après-midi. C’est du code d’étude, pas une base active.
  • Avec une documentation à portée de main. La consultation de manuals du 8088, interrupptions BIOS et références de MS-DOS aide à contextualiser chaque module.
  • En cherchant des modèles. La conception en machines à états, tableaux de tokens, déroulement par sauts et routines d’E/S reste une technique toujours vigente.
  • En comparant avec des interprètes modernes. Observer comment GW-BASIC parse et exécute des lignes aide à comprendre les décisions d’un REPL et à apprécier les techniques actuelles (AST, bytecode, JIT).

Pourquoi c’est essentiel pour l’enseignement (et la nostalgie intelligente)

Celui qui a appris à programmer avec 10 PRINT "BONJOUR" reconnaîtra immédiatemment le flux mental : écrire, lister, exécuter, déboguer. Pour les enseignants, ce dépôt est une invitation à organiser des ateliers de “retour vers le passé” : lecture de fragments, commentaires de modules, comparaisons avec des implémentations modernes, et même propositions d’exercices de pseudo-assembleur sur papier. À une époque où l’apprentissage de la programmation repose sur des couches très hautes (cloud, frameworks web, notebooks), plonger dans la tranchée du 8088 permet de ancrer les concepts : ce qu’est une pile, comment fonctionne une interruption, ou pourquoi un buffer doit tenir en mémoire.

Ce que le dépôt n’est pas

Microsoft est clair : aucun support, aucun changement accepté, pas de plans pour ouvrir d’autres variantes ni le traducteur ISA. Le dépôt n’a pas vocation à produire des binaries ni à faire revivre des produits commerciaux. Il s’agit plutôt d’un archives. Sa valeur réside dans le lire et l’apprendre.

Une pièce supplémentaire dans la reconstruction du passé numérique

Après la réouverture de MS-DOS 1.25 et 2.0, GW-BASIC s’inscrit dans une tendance saine : récupérer les sources originales pour que chercheurs, enseignants et passionnés puissent voir “sous le capot” de l’informatique qui a marqué les années 80. Tout le passé ne peut pas toujours être conservé — outils, traductions, contextes complets — mais ce qui est là suffit à raconter l’histoire avec rigueur.

Pour la communauté maker et les amateurs de rétro, c’est aussi un rappel : la rareté aiguise l’ingéniosité. Dans une époque où les modèles de langage et les GPU semblent infinites, replonger dans l’ascétisme du 8088 et de l’assembleur aide à comprendre que l’élégance ne vient pas seulement des frameworks, mais de la capacité à savoir quand et comment optimiser chaque byte.


Questions fréquentes (FAQ)

Quelle licence couvre le code GW-BASIC publié par Microsoft ?
Il est distribué sous licence MIT, permettant sa lecture, copie et utilisation avec peu de restrictions. Cependant, le dépôt est archivé en mode uniquement lecture et n’accepte pas de pull requests.

Puis-je compiler le code pour obtenir un binaire fonctionnel ?
Aucun script de compilation, makefile ni outil n’est fourni. Le matériel est offert à des fins historiques et éducatives. La compilation exigerait de reconstruire un environnement et des outils propres à 1983.

Pourquoi tout est en assembleur et non en C ?
Parce qu’à la toute fin des années 70 et au début des années 80, chaque byte comptait. Les compilateurs de haut niveau étaient coûteux, peu efficaces et souvent inexistants pour ces plateformes. Programmer en assembleur permettait d’optimiser la gestion de la mémoire et de tirer parti du hardware.

Quel lien existe-t-il entre GW-BASIC, BASICA et le Microsoft BASIC original ?
GW-BASIC provient de BASICA (IBM Advanced BASIC), lui-même basé sur le Microsoft BASIC créé initialement pour l’Altair 8800. Le dépôt montre la version pour 8088 utilisée lors de la période du IBM PC/XT et ses compatibles.

le dernier