Grand Central Dispatch : réflexions sur un don

Florian Innocente |
Le blog MacResearch, spécialisé dans l'actualité Apple pour les milieux scientifiques, s'interroge sur les motivations qui ont conduit Apple à livrer le code de Grand Central Dispatch (GCD).

L'initiative est en effet singulière puisque GCD fait partie des nouveautés mises en avant par Apple pour vanter les mérites et les innovations de son dernier OS. En livrant les clefs (pas toutes) de cette technologie, elle facilite sa transposition sur des plateformes concurrentes.

La première raison possible, déjà avancée, est de bénéficier en retour des améliorations qui auront été effectuées par d'autres développeurs. WebKit a montré la voie sur ce point, Google, pour ne citer que lui, participe à son évolution.

Drew McCormack, l'un des contributeurs de MacResarch, minimise le risque de voir un gros concurrent d'Apple se saisir de cette technologie. Selon lui Microsoft ne le fera pas et les seuls pouvant y trouver intérêt seront les gens du monde Linux et Unix au sens large. Des plateformes qui ne posent pas à proprement parler de problèmes de concurrence à Mac OS X.

Partant de là, des développements Unix autour de GDC pourraient venir ensuite sur Mac. Chose moins envisageable si Grand Central reste un simple citoyen de Mac OS X.

Autre argument avancé, celui de pousser à l'adoption d'une particularité de Grand Central Dispatch, les Blocks. Ils permettent de définir des tâches au sein de l'application qui seront prises en charge par GDC en vue de leur distribution vers les coeurs du processeur. Ces Blocks s'appuient sur un jeu d'extensions au langage C (et dérivés). N'étant en rien standards, ces instructions verraient leur utilisation et adoption stimulée par cette ouverture de Grand Central.

Toutefois, McCormack souligne qu'Apple n'a pas distribué l'intégralité de GDC, il faut par exemple l'adapter soi-même pour chaque kernel de destination. Et les compilateurs C capables de gérer ces extensions maison sont encore rares. Le projet n'en est qu'à ses débuts et sa large adoption tient encore du domaine de l'hypothèse.
avatar Florian Innocente | 
@ Almux : bien lu ;-) Cela dit, je corrige un truc, je me fait l'écho de l'analyse d'un autre, je n'en suis pas l'auteur.
avatar oomu | 
android=linux
avatar Manueel | 
NiarKal tu as raison. Je suis surpris, j'imaginais que dans un futur proche il y aurait convergence entre les os pour terminaux et ceux des ordis, C'est me semble-t-il la direction qu'a pris Apple et sa force c'est me semble-t-il une des principales faiblesses de microsoft (d'avoir deux os distincts)
avatar Luc_J_Bourhis | 
>> il faut par exemple l'adapter soi-même pour chaque kernel de destination Pas un réel problème à mon humble avis. Explications (longues!). Les algorithmes que Apple utilisent dans le noyau de Snow Leopard pour dispatcher sur les différents processeurs les tâches que les programmes utilisant GCD veulent lancer, je suis prêt à parier qu'ils n'ont rien de révolutionnaires. En plus, leur implémentation est nécessairement très très spécifique au noyau de Snow Leopard et donc pas du tout utile pour un autre noyau. Par exemple, un version Linux demanderait sûrement a être réécrite de zéro. Linux possède déjà les fondations nécessaires pour coder ces algorithmes et une armée d'experts capables de le faire. Ce qui est vraiment novateur, finalement, comme l'illustre très bien John Siracusa dans son article sur Snow Leopard (http://arstechnica.com/apple/reviews/2009/08/mac-os-x-10-6.ars/13), c'est la facilité avec laquelle un développeur peut transformer son code pour tirer parti de GCD. Cette facilité, Apple l'atteint grâce à la combinaison d'un nouvel élément de syntaxe ajouté au langage C (les fameux Blocks) et d'une boîte d'outils. Cette boîte d'outil ainsi que les compilateurs capables de comprendre cette nouvelle syntaxe, et bien Apple les a placés dans le domaine public, en Open Source. Et ça, c'est très bien en effet! On peut espérer que cela motivera les développeurs de GCC, la suite de compilateur utiliser en autre sur Linux, à ajouter cette extension du langage C à celles que GCC supporte déjà. Le grand débat en ce moment dans la communauté, c'est que le prochain standard C++, appelé C++0x car il sera finalisé dans les années 2010, propose une syntaxe (les expressions Lambda) ayant la même finalité que les Blocks de Apple. Il y a la place pour les 2, je pense car tous le monde ne veut pas avoir à coincer ses doigts dans la mécanique C++.
avatar vince16 | 
C'est quoi GDC ?
avatar lemail2mi | 
Je site http://libdispatch.macosforge.org/: "The Mac OS X kernel support for GCD may be found in the xnu project." avec un lien vers le code source de xnu. Donc rien n'empêche d'aller voir comment c'est fait.
avatar oomu | 
@Luc_J_Bourhis très intéressant tout ça. l'utilisation de GCD est très aisée. c'est sa grande force.
avatar oomu | 
>C'est plutôt Chrome OS le (futur) concurrent de Mac OS. non, parce que tout simplement mac os n'est pas un produit en concurrence. Le produit c'est le "mac". le concurrent d'un mac, ca pourrait être un ordinateur fini (un "chrome vaio sony" par exemple) + chrome os - >Android est plutôt un concurrent d'iPhone OS qui n'a pas Grand Central (faut dire que pour le moment >l'utilité est nulle :p). idem, dans la pratique android n'est pas un concurrent de iphone OS. vu qu'Apple ne veut pas qu'iphone os soit utilisé par d'autres constructeurs. Apple se fiche complètement de séduire des constructeurs avec iphone os. Iphone Os n'est pas en concurrence avec android. Par contre, Apple veut totalement concurrencer chaque constructeur de téléphone. Iphone (os+matériel) est en concurrence avec chaque téléphone de constructeurs. Un vrai concurrent de l'iphone, c'est le blackberry, par exemple. - comparer l'os de l'iphone comme produit générique à un autre système générique n'a pas de sens commercial : ce n'est pas l'offre que propose apple. Y a pas de mise en concurrence à android par apple. Par contre apple concurrence clairement les produits androids de HTC par exemple.
avatar hawker | 
c'est pour rendre gcd plus populaire. sinon de la a dire que chrome os ou android sont les concurrent de mac. c'est une insulte a linux d'être mis en arrière de systèmes même pas encore sortis (et en plus qui pompe bien son noyau).
avatar NicolasO | 
N'est-ce pas lié au fait que les extensions pour C sont intégrés à gcc, sous GPL? Ainsi, ils doivent au moins donner cela à la communauté pour des raisons de license. Par ailleurs, pour le projet WebKit, il me semble que la même raison s'appliquait. Apple a utilisé KHTML, la librairie HTML de KDE, pour construire Safari et a rendu les améliorations, car ils ne pouvaient pas faire autrement.
avatar Macleone | 
[quote]N'est-ce pas lié au fait que les extensions pour C sont intégrés à gcc, sous GPL? Ainsi, ils doivent au moins donner cela à la communauté pour des raisons de license[/quote] Non, clang est sous license BSD, et c'est Apple qui est à l'origine des Blocks (et ils n'ont donc rien à rendre à personne). Et surtout, GCD n'a absolument rien à voir avec les Block, si ce n'est que l'API basé sur les Block est beaucoup plus pratique à utiliser quel celle basé sur les callbacks C.
avatar kubernan | 
L'adoption de GCD dépendra aussi et surtout des performances qu'il est censé amené dans le domaine très complexe de la gestion du multi-thread.
avatar youpla77 | 
@kubernan : entièrement d'accord mais pour l'instant on peut pas dire qu'apple montre l'exemple... Vous trouvez que les applis livrées avec Snow Leopard sont plus rapide ? L'OS semble plus réactif, mais je ne trouve pas que les applis vont 20% plus vite. Faut surement encore attendre un peu...
avatar Dr_cube | 
[quote]Je suis surpris, j'imaginais que dans un futur proche il y aurait convergence entre les os pour terminaux et ceux des ordis,[/quote] Les termes que tu utilises ne sont pas corrects : un "terminal" désigne n'importe quel ordinateur (normalement connecté à un réseau), qu'il soit un PC ou un téléphone portable. Le terme "ordinateur" ne désigne pas que les PC, mais toutes les machines à calculer programmables. Les iPhone, les iPod, les Playstation 3, les Nintendo DS ou les télé HD sont des ordinateurs. Si Apple n'était pas à la tête du plus grand magasin de musique du monde, ils auraient très bien pu continuer à s'appeler "Apple Computer", car les iPod, les iPhone, les Mac et les Apple TV sont des ordinateurs. Pour répondre à ta question, je ne sais pas s'il y aura convergence à moyen terme entre les systèmes pour mobiles et les systèmes pour PC. En effet, les besoins sont assez différents : les mobiles ont besoin d'économiser les ressources alors que les PC ont besoin d'optimiser la puissance de calcul et doivent gérer de nombreuses tâches en parallèle. Dans tous les cas, les interfaces homme-machine ne convergeront pas, c'est une certitude. Donc même si à terme les systèmes sont quasiment les mêmes, les interfaces seront toujours différentes. Par exemple, si Apple devait sortir une tablette tactile pour une utilisation mobile, elle ne pourrait pas avoir les mêmes interfaces que l'iPhone ou que Mac OS X.
avatar Un Vrai Type | 
@ Manueel, Dr_cube : C'est en effet exact, mais je souligne qu'Apple utilise OS X dans l'iPhone, les macs et les machine de travail (serveur/station). Je suppose que l'OS des iPods a encore de beaux jours devant lui (sauf sur le touch), mais pour le reste, la convergence est déjà là. Maintenant, pour les "utilitaires", évidement, l'iPhone ne supporte pas CUPS et ne peux pas imprimer sur 10000 modèles d'imprimantes. A plus de 250 Mo la fonction, sur 8-16 ou 32 Go et pour une utilisation quasiment improbable, on ne le met pas. De même que je suppose qu'Apache n'y est pas... Et GCD fait partie des trucs inutile sur l'iPhone (pour le moment ?). Donc la convergence est déjà présente, mais elle est aussi pragmatique. Quand aux interface, ce que tu dis est très juste, il n'y a que linux pour s'extasier afficher un prompt sur un iPod ...
avatar tamino | 
N'est-ce pas aussi simplement pour encourager la propagation de cette technologie et la rendre plus universelle, et, de là, encourager les développeurs à l'utiliser?
avatar Almux | 
Oui, c'est ce qu'à avancé Florian, entre autres.
avatar Manueel | 
Peu probable que Microsoft s'en saisisse certes, Unix et Linux pas réeelement concurrent d'Apple oui, par contre pas impossible qu'Android l'adopte... Android peut très bien devenir le premier concurrent d'Apple (sur téléphone comme sur ordinateur)
avatar NiarKal | 
C'est plutôt Chrome OS le (futur) concurrent de Mac OS. Android est plutôt un concurrent d'iPhone OS qui n'a pas Grand Central (faut dire que pour le moment l'utilité est nulle :p).

CONNEXION UTILISATEUR