Jouer avec Docker et Pascal
Peut-on exécuter aujourd'hui du code Pascal vieux de 30 ans ? Oui ! Ce guide vous montre comment utiliser Docker et le Free Pascal Compiler (FPC) pour compiler et exécuter vos anciens programmes Turbo Pascal.
Traduction automatique
Cet article a plus d'un an, mais il a été relu le 30 juillet 2026 — son contenu est toujours exact.

Cet article ressuscite du code source Turbo Pascal vieux de 30 ans (récupéré dans la vieille archive SWAG) en utilisant l'image Docker signumtemporis/fpc pour compiler des fichiers .pas en exécutables Windows, sans aucune installation locale. Au programme : un « Hello World » et une vieille fonction de conversion d'un octet en binaire écrite en 1992.
Que de bons souvenirs... Pendant mes études (en 1991-1993), j'étais un grand fan de Turbo Pascal 7.0. C'est le premier langage que j'ai vraiment appris, et je l'adorais. Je passais des dizaines d'heures derrière mon ordinateur à écrire tout et n'importe quoi.
Si vous vous souvenez encore de cette époque, Turbo Pascal 7.0 servait à créer des exécutables pour MS-DOS.
L'idée de cet article m'est venue après celui écrit sur le langage assembleur : est-il possible, en 2023, de faire tourner du code Pascal écrit 30 ans plus tôt ?

La première chose à faire était de retrouver du vieux code source et, pour ça, je suis retourné voir le Sourceware Archive Group, plus connu sous le nom de SWAG.
La requête paramétrée suivante retrouve du code que j'ai publié il y a 30 ans : https://www.google.com/search?q=avonture+site%3Ahttp%3A%2F%2Fwww.retroarchive.org. Par nostalgie, j'ai aussi recopié ces sources ici : https://github.com/cavo789/swag.
Hello world
Lancez mkdir C:\tmp\pascal && cd C:\tmp\pascal dans une console MS-DOS pour créer un dossier appelé pascal et vous y placer.
Créez un nouveau fichier appelé Hello.pas avec ce contenu :
begin writeln('Hello world! I''m a Turbo Pascal source code');end.Ce programme Pascal affiche simplement un message texte à l'écran. C'est un exemple minimal qui démontre la structure de base d'un programme Pascal exécutable.
Comme vous le savez, Pascal est un langage compilé et doit donc être compilé en .exe. La commande ci-dessous s'en charge :
Notre exécutable a été créé. Il est temps de le lancer avec Hello.exe :
Voilà, nous avons créé avec succès notre premier code Pascal en 2023.
Ce blog possède une petite collection d'articles du type « faire tourner le langage X sans l'installer » : Java, Python et PHP.
Rappel sur la CLI Docker
Pour rappel, les commandes docker run utilisées sont (presque toujours les mêmes) :
-itpour démarrer Docker en mode interactif, ce qui permet au script exécuté dans le container de vous poser des questions par exemple,--rmpour demander à Docker de tuer et supprimer le container dès que le script a été exécuté (sinon vous vous retrouverez avec une tonne de containers Docker arrêtés mais pas supprimés ; vous pouvez le vérifier en n'utilisant pas le flag--rmpuis en lançantdocker container listdans la console),-v %CD%:/apppour partager votre dossier courant avec un dossier appelé/appdans le container Docker,-w /apppour dire à Docker que le répertoire courant, dans le container, sera le dossier/app,- puis
signumtemporis/fpc:cross.x86_64-win64.slimqui est le nom de l'image Docker à utiliser et, enfin, Hello.pasc'est-à-dire notre fichier source (l'image fpc ne semble pas demander de préciser l'exécutablefpc; juste le fichier source).
Convertir un nombre en octet
Essayons quelque chose d'un peu plus complexe qu'un simple Hello world : une fonction de conversion pour déterminer la représentation binaire d'un nombre positif (soyez indulgent, c'était un devoir scolaire 😄).
J'ai écrit cette fonction en 1992 (publiée dans le SWAG en 1997) : https://github.com/cavo789/swag/blob/master/Byte2Bin/files/source.pas
Créez le fichier Byte2Bin.pas sur votre disque avec ce contenu :
Function Byte2Bin (Chiffre : Byte) : String;
Var I, Temp : Byte; St : String;
Begin
St := '';
For I := 7 Downto 0 do Begin Temp := (Chiffre and (1 shl I)); If (Temp = 0) then St := St + '0' Else St := St + '1'; End;
Byte2Bin := St;
End;
begin WriteLn( Byte2Bin(197) );end.Cette fonction convertit un nombre entier (byte) en sa représentation binaire sous forme de chaîne de caractères. Elle examine chaque bit du nombre de gauche à droite en utilisant des opérations binaires et ajoute '0' ou '1' à une chaîne résultat selon que le bit est vide ou non.
SHL pour Shift left one position
L'instruction shl décale le nombre d'un octet vers la gauche.
Et compilez-le :
Comme vous pouvez le voir dans le code source, l'idée était d'afficher la représentation binaire de 197 et, oui !, c'est bien 11000101. Toujours en 2023.
OK, l'intérêt de faire tourner du code TP7 en 2023 est minime et inutile, mais c'est bien amusant de voir que ça marche encore.
Même idée, autre langage : j'ai aussi joué avec Python et Java en utilisant exactement la même approche Docker « zéro installation locale ».





