Quand on commence à se poser ce type de questions, l'on finit par se rendre compte qu'il n'y a ni de Saint Graal ni de lingua franca en matière de portabilité.
En exagérant, je peux dire comme toi : Je commence à avoir le sentiment que le code machine du 8008 apporte des extensions qui interdisent la compabilité avec les programmes concçu pour la machine de Turing originale.
(trop gros, passera pas...)
Je commence à avoir le sentiment que POSIX apporte des extensions qui interdisent la compabilité avec l'Unix primordial.
(trop gros, passera pas mieux...)
L'on travaille en permanence avec un empilement d'abstractions (des hypothèses sur comment focntionne ce sur quoi tu t'appuies). POSIX est l'abstraction d'un OS. Un langage est une abstraction. Une pile réseau est une pile d'abstractions. etc.
Ce qui nous pourrit la vie, c'est que ces abstractions (ou plutôt leurs "implémentations") ont leurs limites : chaque fois, que tu es obligé d'ouvrir le capot (ou de descendre dans la pile d'abstractions) pour comprendre pourquoi ça ne marche pas.
- Parce que le compilo est buggé ou incomplet
- Parce qu'Henri s'est pris les pieds dans le câble réseau
- Parce que non, finalement cette partie du standard était pas utile pour les développeurs de la bibliothèque alors personne ne l'a testée
- Parce qu'un moustique s'est logé dans une douille
- Parce que c'est la canicule ces jours-ci et que ta station est mal ventilée
etc.
Pour limiter ces risques et donc faire un développement portable, il faut choisir avec parcimonie les abstractions dont l'on a besoin.
C'est pénible comme choix car plus tu veux de confort et ne pas passer ton temps à réinventer la roue, plus tu veux utiliser des abstractions de haut niveau ; malheureusement comme elles sont de haut niveau elles reposent sur toute une théorie d'autres abstractions. Autant de facteurs libres pouvant te poser problèmes.
(Que faire Hans, que faire ? Mâchez finnois : GNU/Stimorol !)
Un moyen d'accéder au confort sans se prendre la tête, c'est de dire :
- ok, je ne fais plus du C++ mais du C++ pour tel compilo
- ok, je ne fais plus du POSIX mais du Solaris
- ok, je choisis telle et telle implémentations et je ne me soucie pas du reste.
En bref tu jettes aux orties ta portabilité. Sauf...
...sauf si les implémentations que tu as choisies existent presque partout (au moins là où tu espérais porter).
C'est pour ça que beaucoup de projets "Unix" nécessitent GNU. Car GNU est une implémentation qui tend à jouer le rôle de l'abstraction.
En fait le caractère libre estompe la différence entre implémentation et abstraction : à quo bon développer un standard dans les moindres détails quand il existe une implémentation de référence libre. Quasiment tout le monde prendre l'implém' de référence et presque personne n'essayera de réimplémenter le standard.
Voilà là où je voulais en venir : Les implémentations libres ne sont pas tant à comparées aux implémentations propriétaires qu'aux les standards.
La question n'est pas GNU ou Solaris (ou HPUX, etc.) mais GNU ou Posix.
(J'ai sommeil si vous avez rien compris à ma prose, je réponds aux questions aux heures de consultation ;-))
# Le dilemme du plus petit dénominateur commun
Posté par Christophe GRAND . En réponse au journal réflexion du soir, bonsoir. Évalué à 5.
En exagérant, je peux dire comme toi :
Je commence à avoir le sentiment que le code machine du 8008 apporte des extensions qui interdisent la compabilité avec les programmes concçu pour la machine de Turing originale.
(trop gros, passera pas...)
Je commence à avoir le sentiment que POSIX apporte des extensions qui interdisent la compabilité avec l'Unix primordial.
(trop gros, passera pas mieux...)
L'on travaille en permanence avec un empilement d'abstractions (des hypothèses sur comment focntionne ce sur quoi tu t'appuies). POSIX est l'abstraction d'un OS. Un langage est une abstraction. Une pile réseau est une pile d'abstractions. etc.
Ce qui nous pourrit la vie, c'est que ces abstractions (ou plutôt leurs "implémentations") ont leurs limites : chaque fois, que tu es obligé d'ouvrir le capot (ou de descendre dans la pile d'abstractions) pour comprendre pourquoi ça ne marche pas.
- Parce que le compilo est buggé ou incomplet
- Parce qu'Henri s'est pris les pieds dans le câble réseau
- Parce que non, finalement cette partie du standard était pas utile pour les développeurs de la bibliothèque alors personne ne l'a testée
- Parce qu'un moustique s'est logé dans une douille
- Parce que c'est la canicule ces jours-ci et que ta station est mal ventilée
etc.
Pour limiter ces risques et donc faire un développement portable, il faut choisir avec parcimonie les abstractions dont l'on a besoin.
C'est pénible comme choix car plus tu veux de confort et ne pas passer ton temps à réinventer la roue, plus tu veux utiliser des abstractions de haut niveau ; malheureusement comme elles sont de haut niveau elles reposent sur toute une théorie d'autres abstractions. Autant de facteurs libres pouvant te poser problèmes.
(Que faire Hans, que faire ? Mâchez finnois : GNU/Stimorol !)
Un moyen d'accéder au confort sans se prendre la tête, c'est de dire :
- ok, je ne fais plus du C++ mais du C++ pour tel compilo
- ok, je ne fais plus du POSIX mais du Solaris
- ok, je choisis telle et telle implémentations et je ne me soucie pas du reste.
En bref tu jettes aux orties ta portabilité. Sauf...
...sauf si les implémentations que tu as choisies existent presque partout (au moins là où tu espérais porter).
C'est pour ça que beaucoup de projets "Unix" nécessitent GNU. Car GNU est une implémentation qui tend à jouer le rôle de l'abstraction.
En fait le caractère libre estompe la différence entre implémentation et abstraction : à quo bon développer un standard dans les moindres détails quand il existe une implémentation de référence libre. Quasiment tout le monde prendre l'implém' de référence et presque personne n'essayera de réimplémenter le standard.
Voilà là où je voulais en venir :
Les implémentations libres ne sont pas tant à comparées aux implémentations propriétaires qu'aux les standards.
La question n'est pas GNU ou Solaris (ou HPUX, etc.) mais GNU ou Posix.
(J'ai sommeil si vous avez rien compris à ma prose, je réponds aux questions aux heures de consultation ;-))