mardi 20 février 2007

Mac OS X: NextStep inside !

Ce n'est un secret pour personne, Mac OS X est basé sur Unix, et c'est une des raisons principales de mon enthousiasme pour ce système d'exploitation.

En fait, on ne peut pas dire que Mac OS X est "un Unix" car pour pouvoir dire cela il faut payer The Open Group qui est l'actuel propriétaire de la marque déposée "Unix".

On dira donc que Mac OS X est un "Unix-like", comme notamment AIX, FreeBSD, HP-UX, IRIX, Linux, Solaris, Tru64, et Ultrix.

En fait Mac OS X descend en droite ligne de NextStep, le système d'exploitation du NextCube. Le NextCube était une station de travail de la société NeXT Computer, la société que Steve Jobs créa après avoir été contraint à quitter Apple le vendredi 13 septembre 1985 suite à une lutte interne avec le CEO de l'époque, John Sculley.

NextStep était un système d'exploitation particulièrement avancé pour son époque, car il intégrait les caractéristiques suivantes:
  • basé sur un kernel Mach et une couche BSD
  • multi-tâches
  • multi-utilisateurs
  • environnement de développement orienté-objet en Objective-C
  • une interface graphique très avancée, avec notamment le Dock
  • l'affichage géré par Display PostScript
Il est intéressant de constater que l'on peut trouver des traces de NextStep dans Mac OS X. Une commande Mac OS X relativement peu connue donne la liste de toutes les classes Objective-C appelées par un processus, c'est la commande heap. Regardez:

[pierre@ibook] /Users/pierre> heap Dock
Process 142: 1 zone
Zone DefaultMallocZone_0x300000: Overall size: 9352KB; 5303 nodes malloced for 554KB (5% of capacity); largest unused: [0x01839e00-7992KB]

Zone DefaultMallocZone_0x300000: 5303 nodes - Sizes: 24KB[1] 20KB[2] 16KB[1] 11KB[1] 8KB[2] 5KB[1] 5KB[1] 4KB[11] 3072[5] 2560[9] 2048[6] 1536[14] 1024[48] 512[11] 480[4] 464[2] 448[5] 432[4] 400[2] 384[1] 352[2] 336[6] 320[4] 304[2] 288[13] 272[17] 256[12] 240[196] 224[24] 208[14] 192[38] 176[21] 160[7] 144[46] 128[47] 112[58] 96[190] 80[221] 64[212] 48[1137] 32[837] 16[2068]

Found 510 ObjC classes in process 142

-----------------------------------------------------------------------
Zone DefaultMallocZone_0x300000: 5303 nodes (566912 bytes)

CLASS_NAME COUNT BYTES AVG
========== ===== ===== ===
2171 404016 186.1
NSCFNumber 1213 19408 16.0
NSCFString 721 27072 37.5
NSCFDictionary 630 85824 136.2
NSCFType 243 17296 71.2
NSCFArray 162 4896 30.2
NSURL 62 1984 32.0
NSCFSet 35 1696 48.5
NSMachPort 27 1728 64.0
NSCFData 25 2544 101.8
NSCFAttributedString 10 160 16.0
NSCFTimer 2 160 80.0
NSNotificationCenter 1 64 64.0
NSThread 1 64 64.0

... toutes les classes Objective-C commencent par NS, ce qui signifie bien entendu NextStep.