[AUR] Darling : couche d'émulation Darwin/OSX pour GNU/Linux
Publié : dim. 30 juin 2013, 18:16
Salut.
Vous connaissez peut-être Wine (Wine Is Not an Emulator), qui permet d'exécuter des applications compilées pour Windows (binairement parlant, elles portent le doux nom de PE32 executable, pour les applications 32 bits) sous GNU/Linux, BSD, Solaris et (Mac) OS X.
Il y a peu de temps, j'ai trouvé un autre projet, qui a aussi la vocation d'exécuter certaines applications non-compilées pour GNU/Linux sous GNU/Linux. Elle permet plus exactement d'exécuter les binaires Mach-O executable sous GNU/Linux, pour simplifier, les programmes pour Darwin et OS X (note : c'est depuis la version 10.8 que le préfixe 'Mac' a officiellement disparu). Car je l'avoue, il y a encore peu de temps de ça, je me demandais encore pourquoi, alors qu'OS X est de la famille des UNIX, et GNU/Linux un UNIX-like, et par la même occasion tous les deux compatibles POSIX, pourquoi ils n'étaient pas compatibles au niveau binaire... J'ai donné la réponse plus haut; le noyau Linux supporte officiellement les binaires ELF.
J'ai été surpris quand j'avais lu en décembre, sur Phoronix, qu'un projet de ce type venait "seulement" de naître. J'avais gardé ça de côté, et il y a peu, je me suis mis le défis de faire tourner Darling sous ArchLinux. Et c'est là qu'ont débuté les choses marrantes...
Darling a nécessité de recompiler le cœur de GNUstep avec Clang. Certes, ça ne fait "que" six paquets de plus, mais pourquoi pas. Après de nombreuses bêta-tests en interne, qui m'ont demandé une forte sollicitation de VirtualBox pour éviter les gros problèmes sur mon système (la preuve en image, j'ai enfin réussis à proposer, à peu près proprement, GNUStep compilé avec Clang. C'est seulement à partir de ce moment là que j'ai pu vraiment proposer Darling à la communauté.
Trêve de bavardage, voici le paquet sur AUR, qui puise ses sources sur le git du projet Darling : darling-git
Dans le PKGBUILD, je propose alternativement le fork de Crwulff, qui est à mes yeux un Darling amélioré (il reprend le Darling original de LubosD, les nouveaux commits de Darling, mais il y a des patchs supplémentaires).
J'ai aussi un problème avec gnustep-libobjc2-clang-git, qui veut créer une bibliothèque /usr/lib/libobjc.so, mais une du même nom existe déjà car elle appartient à gcc-libs. Bien que libobjc.so de gnustep-libobjc2-clang-git se vente de pouvoir remplacer la libobjc.so de gcc-libs, je n'ai pas trouvé de moyen de faire cohabiter ces deux bibliothèques, sans causer un quelconque conflit. Donc pour l'instant, mis à part supprimer/renommer /usr/lib/libobjc.so avant l'installation de gnustep-libobjc2-clang-git, ou bien utiliser l'option --force dans pacman, je n'ai pas trouvé de solution à ce problème. J'ai fouillé dans les sources de GNUstep Objective-C, sans succès.
De plus, il y a un problème avec le fichier /usr/include/unistd.h lors de la compilation de Darling. J'ai lu que c'était "normal", car il y a un conflit de nom de variables dans ce fichier il me semble (la faute des développeurs de glibc qui ne veulent pas patcher d'après ce que j'ai compris), donc je propose interactivement de corriger ce soucis dans darling-git, en espérant que ça ne soit pas trop déprécié comme méthode.
Bien sûr, ce n'est pas encore grâce à ça que vous pourrez faire tourner, par exemple, les gros jeux OpenGL compilés pour OS X, vu qu'il manque beaucoup de Frameworks, mais je cherche une solution à ça, tout comme les développeurs du projet (j'avais réussis à ajouter le framework QuickTime dans mes essais, c'était déjà un bon début).
Si j'ai écris ce message, c'était pour vous faire connaître ce projet, si vous ne le connaissiez pas. Je pense qu'il a le potentiel de devenir autant intéressant que Wine, même s'il n'est pas très populaire et pas très développé actuellement.
Bien entendu, je reste ouvert à toutes propositions, suggestions, remarques, et cetera.
Merci de m'avoir lu, bonne journée.
Vous connaissez peut-être Wine (Wine Is Not an Emulator), qui permet d'exécuter des applications compilées pour Windows (binairement parlant, elles portent le doux nom de PE32 executable, pour les applications 32 bits) sous GNU/Linux, BSD, Solaris et (Mac) OS X.
Il y a peu de temps, j'ai trouvé un autre projet, qui a aussi la vocation d'exécuter certaines applications non-compilées pour GNU/Linux sous GNU/Linux. Elle permet plus exactement d'exécuter les binaires Mach-O executable sous GNU/Linux, pour simplifier, les programmes pour Darwin et OS X (note : c'est depuis la version 10.8 que le préfixe 'Mac' a officiellement disparu). Car je l'avoue, il y a encore peu de temps de ça, je me demandais encore pourquoi, alors qu'OS X est de la famille des UNIX, et GNU/Linux un UNIX-like, et par la même occasion tous les deux compatibles POSIX, pourquoi ils n'étaient pas compatibles au niveau binaire... J'ai donné la réponse plus haut; le noyau Linux supporte officiellement les binaires ELF.
J'ai été surpris quand j'avais lu en décembre, sur Phoronix, qu'un projet de ce type venait "seulement" de naître. J'avais gardé ça de côté, et il y a peu, je me suis mis le défis de faire tourner Darling sous ArchLinux. Et c'est là qu'ont débuté les choses marrantes...
Darling a nécessité de recompiler le cœur de GNUstep avec Clang. Certes, ça ne fait "que" six paquets de plus, mais pourquoi pas. Après de nombreuses bêta-tests en interne, qui m'ont demandé une forte sollicitation de VirtualBox pour éviter les gros problèmes sur mon système (la preuve en image, j'ai enfin réussis à proposer, à peu près proprement, GNUStep compilé avec Clang. C'est seulement à partir de ce moment là que j'ai pu vraiment proposer Darling à la communauté.
Trêve de bavardage, voici le paquet sur AUR, qui puise ses sources sur le git du projet Darling : darling-git
Dans le PKGBUILD, je propose alternativement le fork de Crwulff, qui est à mes yeux un Darling amélioré (il reprend le Darling original de LubosD, les nouveaux commits de Darling, mais il y a des patchs supplémentaires).
J'ai aussi un problème avec gnustep-libobjc2-clang-git, qui veut créer une bibliothèque /usr/lib/libobjc.so, mais une du même nom existe déjà car elle appartient à gcc-libs. Bien que libobjc.so de gnustep-libobjc2-clang-git se vente de pouvoir remplacer la libobjc.so de gcc-libs, je n'ai pas trouvé de moyen de faire cohabiter ces deux bibliothèques, sans causer un quelconque conflit. Donc pour l'instant, mis à part supprimer/renommer /usr/lib/libobjc.so avant l'installation de gnustep-libobjc2-clang-git, ou bien utiliser l'option --force dans pacman, je n'ai pas trouvé de solution à ce problème. J'ai fouillé dans les sources de GNUstep Objective-C, sans succès.
De plus, il y a un problème avec le fichier /usr/include/unistd.h lors de la compilation de Darling. J'ai lu que c'était "normal", car il y a un conflit de nom de variables dans ce fichier il me semble (la faute des développeurs de glibc qui ne veulent pas patcher d'après ce que j'ai compris), donc je propose interactivement de corriger ce soucis dans darling-git, en espérant que ça ne soit pas trop déprécié comme méthode.
Bien sûr, ce n'est pas encore grâce à ça que vous pourrez faire tourner, par exemple, les gros jeux OpenGL compilés pour OS X, vu qu'il manque beaucoup de Frameworks, mais je cherche une solution à ça, tout comme les développeurs du projet (j'avais réussis à ajouter le framework QuickTime dans mes essais, c'était déjà un bon début).
Si j'ai écris ce message, c'était pour vous faire connaître ce projet, si vous ne le connaissiez pas. Je pense qu'il a le potentiel de devenir autant intéressant que Wine, même s'il n'est pas très populaire et pas très développé actuellement.
Bien entendu, je reste ouvert à toutes propositions, suggestions, remarques, et cetera.
Merci de m'avoir lu, bonne journée.