Cosmopolitan - Compiler un binaire unique multi-OS

Publié initialement à : Cosmopolitan – Compiler un binaire unique multi-OS – Korben

Justine Tunney est une développeuse qui un jour, en étudiant du vieux code source, a découvert qu’il était possible d’encoder des fichiers Windows PE (Portable Executable) sous la forme de shell script unix. Cette magie s’opère grâce au fait que le shell Thompson n’utilise pas la ligne d’entête des script commençant par #!. On appelle ça aussi le shebang. « Sh » pour Sharp, à savoir le dièse, et le « bang » pour le point d’exclamation.

Justine a donc compris qu’il était possible de créer un format binaire global fonctionnant aussi bien sous Linux que macOS et Windows.

Pour aller plus loin dans sa découverte, elle a donc mis au point un projet de bibliothèque en C baptisé Cosmopolitan Libc qui permet de compiler du code dans un format exécutable fonctionnant sur tous les OS (Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS) un peu comme ce qu’on pourrait faire avec du java, sauf que là, pas besoin d’interpréteur ou de machine virtuelle.

Voici un exemple de hello world compilé avec Cosmopolitan :

# Un petit hello world en C
printf %s '
  main() {
    printf("hello world\n");
  }
' >hello.c

Une petite compilation avec gcc et les libs qui vont bien :

gcc -g -O -static -fno-pie -no-pie -mno-red-zone -nostdlib -nostdinc \
  -o hello.com.dbg hello.c -Wl,--gc-sections -Wl,-z,max-page-size=0x1000 -fuse-ld=bfd \
  -Wl,-T,ape.lds -include cosmopolitan.h crt.o ape.o cosmopolitan.a
objcopy -SO binary hello.com.dbg hello.com

Et voilà, un petit binaire multi OS ! C’est dingue !

Sur son site, elle propose ce binaire « hello world » qui effectivement fonctionne sans modification sous Mac et Windows et que vous pouvez tester vous-même. (rendez le exécutable avec un chmod +x avant)

Elle explique tout cela sur sa page web. Et la lib Cosmopolitan est sur Github. Maintenant vous saurez quoi proposer aux développeurs qui détestent ElectronJS ;-)))

Merci à Lolilol pour l’info !

2 J'aime

Hello, merci pour l’article. Ça voudrait dire qu’il serait possible de rendre n’importe quel programme portable exécutable Windows en Linux par exemple ?
Et la version Mac/Linux devient portable elle aussi ?

Ce serait énorme, je pense à Veracrypt par exemple.

Ça m’a donné soif tout ça ! Ou pitètre que je vais lire une revue pour les dames …

Je pense que j’aurai fini allègrement la lecture du magazine avant que quiconque ai pu faire tourner un programme de plus de 10 lignes avec un cosmopolitain dans le nez …

Très intéressant… il y a même redbean le serveur web qui permet d’héberger n’importe quel contenu grâce à ce système : redbean c’est juste incroyable !!!

Par contre, aussi talentueuse que cette personne soit, elle semble avoir une personnalité assez complexe à saisir… Justine Tunney - Wikipedia

#= croisillon
♯=dièse… :wink:

Il y a de quoi s’y perdre, même les textes officiels parlent de # dièse :smiley:.
https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000026972451

Et je ne compte plus les standards d’appel me demandant de composer un code, puis de terminer par dièse. Ce dièse # sur les claviers des téléphones (j’ai sorti quelques vieux D.E.C.T. de mon armoire, même symbole).

C’est une mauvaise traduction…!
https://fr.wikipedia.org/wiki/Croisillon_(signe)

Je n’ai jamais dit le contraire… :wink:

1 J'aime