MacPaint

2004.12.12

MacPaint est un des plus célébres et influents des logiciels de dessin graphique. Pratiquement tous les logiciels graphiques — y compris, et surtout Photoshop (cf. tableau) — découlent de son interface autant dans ses details que dans son esprit. Comme il a était livré avec les tous premiers Macintosh, beaucoup de personnes l’ont découvert en même temps qu’ils découvraient la machine elle-même. Il jouait d’ailleurs le rôle de pédagogue dans cette découverte : voici ce que cette machine sait faire, voilà en quoi elle est différente.

Nous ne considérons rien de tout cela un hasard, et expliquerait le phénomène MacPaint par le fait que son concepteur, Bill Atkinson, était à la fois l’architecte des routines visuelles (« QuickDraw ») du système d’exploitation, et le concepteur de ce programme qui s’en servait. Et comme Andy Hertzfeld explique dans son site olklore](170), le processus de dévéloppement de Hertzfeld permettait les deux couches de se verser constamment l’une dans l’autre. Au départ, MacPaint était un logiciel qui permettait de tester et démontrer les avantages du système d’exploitation :

While Bill Atkinson was developing LisaGraf, the crucial, lightning fast graphics package that was the foundation of both the Lisa and Macintosh user interface (it was renamed QuickDraw for the Mac), he also worked sporadically on a simple bitmap-based drawing program for the Lisa called SketchPad. SketchPad enabled mouse-based drawing with a selection of paintbrushes and patterns, and gave Bill a quick way to test out and show off new features or improvements as they were added to LisaGraf.
– Andy Hertzfeld ; MacPaint evolution: Bill decides to leave out a very impressive feature ; 2004

MacPaint sera donc une interface graphique qui ramènera au jour des fonctions plus souterraines du système d’exploitation et ses fonctions « QuickDraw ».

Mais, inversement, le développement du logiciel permettait également d’améliorer ce système en trouvant des erreurs, mais surtout (et plus important) en partageant avec lui-même son savoir-faire. Certaines de ses fonctions étaient extraites du programme pour être placées directement dans le système d’exploitation :

A key improvement came when Bill implemented the paint bucket tool, which allowed the user to fill an entire area of the screen with the selected pattern with a single click. It used a “seed fill” algorithm to find all the neighboring pixels of the matching color, which was difficult to implement because of our stringent memory constraints. Bill ended up implementing a few different seed fill algorithms before he settled on one that was both fast and memory efficient enough. The seed fill routine eventually migrated from MacPaint into QuickDraw as part of the 128K ROM.
– Andy Hertzfeld ; MacPaint evolution: Bill decides to leave out a very impressive feature ; 2004

A partir du moment où une fonction est placée au niveau du système (le 128k ROM, dont parle Hertzfeld), elle peut être utilisée par tous les logiciels sur cette plateforme. Imaginez le principe comme une cooperative de fermiers : certaines ressources sont privées, et appartiennent à chaque ferme, d’autres ressources sont mutualisées entre toutes les fermes pour minimiser leurs coûts. C’est la même chose dans un ordinateur : quand un logiciel fait quelque chose très bien, cette fonction peut être abstraite de cette spécificité vis-à-vis le programme original et remis dans un usage plus modulaire pour n’importe quel autre programme souhaitant s’en servir. C’est exactement ce qui se passait avec MacPaint, surtout parce que les deux couches (plateforme graphique et logiciel graphique) étaient programmées par la même personne, et permettait à Atkinson de comprendre l’intérêt d’une imbrication de l’un dans l’autre.

Ce qui nous amene à proposer une idée qui pourrait surprendre, mais qui nous semble essentiel : MacPaint était un logiciel important dans le développement d’environements de programmation visuelle comme The Patcher, Max/MSP, Pure Data, ou même un autre projet de Bill Atkinson, le tout aussi important HyperCard. Nous dirions même que MacPaint était une forme de programmation visuelle, tellement les interfaces de programmation (les « Application Programming Interfaces » ou « API ») étaient visibles et accéssibles à travers l’interface de MacPaint.

Beaucoup d’encre a coulé sur le jour fatidique (en Décembre 1979) où l’équipe de Steve Jobs est venue regarder les innovations du Xerox Alto (cf. Waldrop, The Dream Machine, p.441). On parle du pillage ce jour-là et comment beaucoup d’innovations se sont retrouvés quelques années plus tard dans le Macintosh. Nous ne sommes pas intéressés par la justesse de ces allégations, car nous considérons que le Macintosh a ajouté autant d’innovations par dessus le Xerox Alto que celui-ci a ajouté sur le oNLine System (NLS) — autant pillé à son époque par le célèbre equipe du Xerox Parc. Par contre, un détail de ce fameux jour nous intéresse, et pourrait nous aider à définir ce que nous entendons par le rapport entre la programmation et le fait de dessiner un objet sur l’écran dans MacPaint :

The climactic moment came when Jobs pointed out that Smalltalk scrolled through text one full line at a time, which made the action rather jerky; he wondered aloud if it couldn’t scroll continuously, one bit-mapped pixel at a time. Sure, said Dan Ingalls, Smalltalk’s lead programmer. He opened a window, changed a few lines of the scrolling code, then closed the window again, and voilà! Through the modular magic of object-oriented programming, Smalltalk now scrolled continuously.
– M. Mitchell Waldropp ; The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal ; 2001 ; pp. 442-3

Le système décrit dans ce passage — Smalltalk (cf. Xerox Alto) — est hautement plus modulaire que ce qu’Atkinson a dévelopé dans QuickDraw. Par contre, le passage décrit très bien le rapport entre les couches programmatiques du système d’exploitation et ce qui fini sur l’écran : derrière la face visuelle, une série de codes est encore sensible — et comme on voit dans cet exemple, encore accessible.

Ensuite, du fait que le projet du Macintosh n’avait pas des ressources matérielles infinies comme l’Smalltalk, et donc que QuickDraw n’est justemment pas la boîte de Lego hautement modulaire qu’est Smalltalk — nous permet de d’isoler encore plus le rapport entre l’API et l’application elle-même. En gros, MacPaint est QuickDraw. Ce qui nous voyons dans MacPaint illustre presque de A à Z ce que savait faire Quickdraw. Un développeur pouvait apprendre autant comment créer son application en lisant la documentation développeur qu’en jouant à MacPaint. Une situation qui est devenue bien réelle lorsque les developpeurs ont contraint Apple a ne plus améliorer MacPaint, leur donnant le temps de le copier presque pixel par pixel à travers des logiciels comme Photoshop (cf. tableau).