# Developpement sous MAC difference avec Linux



## rollerblade (13 Août 2009)

Bonjour,

Je projette d'ici quelques jours de prendre un MacBook.
Or depuis quelques années, je tourne essentiellement sous Linux mais projettant de prendre un portable. Plutot que de prendre un PC avec windows et de tout reformater pour Linux, je pense opter directement pour une solution robuste d'autant que les softs de musique sont assez puissant .
Je developpe en Perl, GTK-PERL, Fortran, des scripts en shell-bash et ma principale question est de savoir si je peux retrouver cela sous MAC.
En fait peut-on retrouver un environnement de développement similaire de Linux sous MAC? et avoir une compatibilité des scripts développés sous Linux avec Mac?

Désolé si ma question est simpliste mais je n'ai jamais pris en main un MAC sauf pour faire tourner GarageBand. 

Merci pour les éventuelles informations


----------



## dmo95 (13 Août 2009)

Mac OS X est un OS basé sur UNIX, de surcroît tu y retrouveras tout tes repères que tu as sur Linux, notamment un Terminal qui est ni plus ni moins que la console Linux.

Donc tous scripts shell, commandes UNIX... s'exécutent de la même manière que sous Linux.


----------



## Hibou57 (13 Août 2009)

Hello,

Comme le dit Dmo, Mac OS X _(mais pas les précédent Mac OS)_, est basé sur un UNIX. Plus précisément, Mac OS X est basé sur Darwin, basé tout à la fois sur FreeBSD et Mach _(un microkernel)_.

Certaines fonctionalité de Mac OS X empruntent à l'un ou l'autre de BSD ou Mach, selon le cas _(je ne me souviens plus du détail, mais en résumer, les fonction liées à la sécurité viennent de BSD et les fonctions de gestion de resources viennent de Mach)_. Si je ne me trompe pas, Darwin a même deux tables de syscalls.

Mac OS X est entièrement POSIX, et tu y retrouvera donc tous les éléments requis par cette norme, qui ne sont pas réservés à UNIX ou Linux. Je veux dire par là, que Mac OS X, n'est pas compatible UNIX ou Linux, mais qu'il est POSIX _(ce qui n'est pas la même chose, surtout si on va dans certains détails)_.

POSIX est toute fois limité, car aucune application moderne ne se contente de l'interface POSIX, qui ne mène guère plus loin que la ligne de commande.

Question UI, l'interface de Mac OS X se nomme Aqua, je ne saurais que trop de *déconseiller* de créer des applications Mac en GTK, sauf si tu les réserve à un usage personel. GTK ne t'offrira pas une interface avec l'API de la GUI de Mac OS X, mais fera comme sous Windows, en re-créant son ensemble de widgets _(quoique sous Windows au moins, GTK essaie d'imiter le style Luna, mais sous Mac OS X, les screen shots que j'ai vu, montre un résultat catastrophique)_.

Par exemple, une application GTK sous Mac, aura 100% le design d'une application GTK sous Gnome... inutile de dire que ça ne fait pas trés propre, d'autant que Aqua et Gnome n'ont rien de comparable, ni dans le style graphique, ni dans les fonctionalités et l'ergonomie.

Pour un usage personel seulement donc, ou pour des utilisateurs pas trop exigents _(logiciel gratuits par exemple)_, mais à éviter dans tous les autres cas.

Sous Linux, je suppose que tu avais l'habitude de développer en C _(ou optionellement en C++)_. Si tu souhaite utiliser l'API standard pour Mac OS X, il te faudra te mettre à Objective-C, ou prendre un langage offrant des possibilités objet et faire un binding entre ce language et l'API Cocoa qui est en Objective-C.

Voilà en gros pour résumer.

Pour les autres différences, qui sont trés nombreuses (Finder, Exposé, Bonjour, etc), tu trouvera tout ce qu'il faut sur le net, les article de Mac-lovers ne manquant pas à ce sujet.


----------



## rollerblade (13 Août 2009)

Merci pour toutes ces infos.
Pour les applications GTK, ce sont des applications persos pour gerer certaines données de maniere graphique. Pas de diffusion.

Ok donc je vais me lancer dans l'aventure MAC


----------



## grumff (14 Août 2009)

En général, tout ce qui peut être fait sous linux peut être fait sur mac. Après pour le fortran je connais pas donc je vais pas me mouiller, mais je serais surpris qu'il y ait des problèmes. En c il doit y'avoir quelques différences avec linux, genre sur des fonctions temps réel, des trucs hérités de bsd qu'on manipule pas tous les jours.
Les os sont un peu différent, donc il y a parfois quelques petites choses qui diffèrent, mais bon, au cours de mes années d'étude où j'avais souvent à faire tourner sous os x des choses développées pour linux, j'ai jamais eu de problèmes bloquant, j'avais même installé un linux sur le mac à un moment donné, mais il a jamais servi.
Pour du shell, j'ai eu une fois une blague avec une commande (non posix à priori, "seq" si je me souviens bien) qui n'existait pas nativement sous os x, mais c'est la seule chose dont je me souvienne. Facile à contourner.
À la limite c'est plutôt en sens inverse qu'il faut faire gaffe, os x peut être plus tolérant pour certains choses, donc si tu dois faire tourner tes programmes sous linux, le fait que ça marche sous os x ne signifiera pas que ça va marcher du premier coup sous linux.

Enfin à mon avis, t'apprécieras le changement, os x c'est tous les avantages d'un bon système unix avec l'interface et la logithèque du mac.


----------



## tatouille (14 Août 2009)

@Hibou57, il n y a pas deux tables de syscalls les vraies syscalls sont private et "inaccessible" du userland, tu fais des "syscalls filtres" par l'intermédiaire de la lib System e.g libC

Darwin est un kernel hybrid-monolithique, il preempte et est multi-thread, ce qu'il reste de mach dans Darwin n'est pas vraiment maR il aurait a mon avis bien fait de rennommer ca en autre chose pour eviter les confusions, en effet Darwin n'utilise aucune function de pret ou de loin d'un microkernel, Darwin c'est plutot un noyeau hybride-monolithique avec une "interface BSD" ce qui en fait une BSD-like, et certainement pas une BSD, 

en gros mach gere: 
- les tasks (thread et process) avec un system de lock primitif
- quelques descritions hardware  qui a mon avis vont disparaitres
- l'Horloge deprecié
- proc control deprecié
- page/vm/memory
- IPC (mach_message et notification) et les ports.

sur cette couche tu as une interface Power Management
sur cette couche tu as une interface Objet I/O -> IOKIt
sur cette couche tu as une interface KEXT/CACHE
sur cette couche tu as une interface BSD
dans cette couche tu as une interface BSD public Appelee KPI -> NKE -> FileSystem -> non-I/O Kit KEXT

@rollerblade achete toi un mac et garde ton PC sous Linux.


----------

