Pourquoi par exemple paint n'est pas compatible sur linux ? quel est la raison ? le noyau ? le système de fichier ? autre chose ?
Merci d'avance.
Premièrement, le format binaire (cf. ici https://www.jeuxvideo.com/forums/1-38-7813810-1-0-1-0-chez-nous-chez-lex-exe-et-chez-vous.htm ) n'est pas le même d'un OS à l'autre.
Ensuite, les bibliothèques de fonctions disponibles ne sont pas les mêmes, et même quand elles sont communes (la plupart des bibliothèques libres par exemple), encore une fois les formats diffèrent (du DLL chez Windows, du Shared Object chez Linux...).
Mais normalement, si tu prends en compte ces deux facteurs et que tu conçois un logiciel en utilisant exclusivement des bases de code (bibliothèques, frameworks) connus pour fonctionner sur plusieurs systèmes, ton code est dit "portable" sur ces systèmes.
Tout ce que tu as à faire une fois le code fini, c'est le compiler sous Linux pour produire la version Linux, sous Windows pour produire la version Windows, etc.
Ah et oui, effectivement le noyau influe aussi. Je classe (à tort) cette pièce dans la catégorie des "bibliothèques" car comme ces dernières il dispose d'une API (un ensemble de fonctions exposées aux développeurs pour leur permettre d'interagir avec lui).
Mais bon, un noyau c'est un peu plus complexe qu'une "simple" bibliothèque de fonctions, donc on va le classer à part.
En fait le principal rôle des bibliothèques "communes" dont je parle plus haut, c'est de fournir la même API au développeur quel que soit le système utilisé derrière, en incluant justement une couche de compatibilité avec chaque système cible (pour faire les bons appels vers le bon noyau quand c'est nécessaire... etc. ).
Actuellement c'est ce que wine fait. Il fournit une bibliotheque de compatibilite des applications windows pour tourner sur un systeme unix. Apres naturellement, c'est loin d'etre parfait.
Tout simplement parce qu'aux débuts de l'informatique grand public dès les années 80, tout le monde n'avait pas la même conception de l'ordinateur personnel (PC).
Certains ont fait un truc (Windows), d'autres ont eu une autre vision (Mac), et d'autres ont en eu une autre (Unix & co).
Le Java est, par exemple, un langage portable car la JVM peut être exécutée sur n'importe quel OS et exécuter un langage universel.
Ok j'ai compris , merci pour vos réponse.