Résumé

  • Mary Shaw comparait l'appel de procédure au langage assembleur de l'interconnexion : un mécanisme de bas niveau utilisé pour coder des relations beaucoup plus riches.
  • Son vocabulaire sépare le composant et le connecteur, le participant et le rôle, le protocole et la configuration, ainsi que le style architectural et la simple interface de module.
  • Un connecteur de premier rang est une relation architecturale spécifiée ; ce n'est ni un microservice, ni un service mesh, ni une passerelle API, ni une preuve formelle automatique.

Deux rectangles, une ligne. Le premier rectangle devient vite « analyseur », le second « stockage ». Mais que signifie la ligne ? Transporte-t-elle un flux, déclenche-t-elle une opération, peut-elle répéter, réordonner ou bloquer un message ? Qui engage l'échange et quelle garantie demeure après une panne ? Le dessin ne tranche rien.

C'est cette dissymétrie que Mary Shaw vise dans son rapport du Software Engineering Institute de janvier 1994, Procedure Calls Are the Assembly Language of Software Interconnection: Connectors Deserve First-Class Status. L'ingénierie logicielle disposait déjà de moyens solides pour représenter calcul et données à l'intérieur d'une unité. Les relations entre unités restaient dispersées dans le code, implicites dans les conventions ou réduites à des flèches anonymes.

L'image de l'assembleur ne dévalorise pas l'appel de procédure. Elle signale une différence de niveau. Lorsqu'un pipeline, une diffusion d'événements ou l'accès à une représentation partagée est recodé à la main comme une suite d'appels, les obligations essentielles — ordre, livraison, synchronisation, liaison — disparaissent du modèle.

Ce que la ligne ne dit pas

Une interface de module énumère des opérations, des types ou des variables exportées. Elle décrit utilement un morceau de code. Elle ne formule pas forcément le protocole complet d'une interaction, la responsabilité de chaque partie ni la propriété attendue de l'ensemble.

Un filtre peut, par exemple, consommer et produire un flux selon une discipline donnée. Le conditionner sous forme de procédure ne transforme pas cette relation en appel ordinaire : quelqu'un doit encore prendre en charge le tampon, l'ordonnancement et la fin du flux. Si ces responsabilités n'existent que dans du code de liaison, le contrat le plus important de l'architecture n'a pas de nom.

Il en va de même pour les événements, les dépôts partagés ou les protocoles réseau. Le mécanisme réalise la connexion ; il n'en épuise pas le sens. Rendre le connecteur « de premier rang », dans l'argument de Shaw, consiste à pouvoir le nommer, le spécifier, l'instancier et l'examiner directement.

Huit notions à ne pas confondre

Le composant est le lieu du calcul et de l'état. Ses points visibles de participation sont des participants (players) : procédure, port ou extrémité d'un flux.

Le connecteur est le lieu de la relation entre composants. Son protocole définit la forme de l'interaction et ses garanties ; ses rôles décrivent ce qui est attendu d'un client et d'un serveur, d'un producteur et d'un consommateur, d'un éditeur et d'un abonné.

La configuration assemble l'architecture en attachant les participants des composants aux rôles des connecteurs. C'est à cet endroit que l'on peut demander si un participant satisfait son rôle et si les protocoles sont compatibles.

Un style architectural est une famille réutilisable qui contraint les types de composants, les types de connecteurs et leur topologie. Pipe-and-filter, client-serveur, couches et tableau noir sont des styles, pas une configuration particulière.

Enfin, l'interface de module décrit ce qu'une unité expose ; une propriété du système — capacité, débit, cohérence, fiabilité ou compatibilité — résulte de l'assemblage. Une signature peut être correcte alors que la conversation se bloque. Deux API peuvent être valides tout en divergeant sur les reprises. La faute se situe alors dans le protocole du connecteur ou dans l'attachement d'un participant à un rôle.

Un programme collectif à Carnegie Mellon

Le rapport de Shaw appartient à un programme plus vaste. David Garlan et Mary Shaw ont présenté l'architecture logicielle comme l'étude de l'organisation à grande échelle, des interactions et des styles récurrents. Leur travail sur les langages architecturaux de plus haut niveau souligne les limites des modules et des schémas informels.

Robert Allen et David Garlan ont donné aux connecteurs une sémantique formelle dans leur article ICSE de 1994. Le connecteur y rassemble des protocoles associés à des rôles, et la compatibilité peut être étudiée d'une manière proche du typage. Ce résultat revient à Allen et Garlan : l'histoire perd sa précision si toute contribution du groupe est attribuée à Shaw seule.

UniCon a ensuite concrétisé ces idées. Mary Shaw, Robert DeLine, Daniel V. Klein, Theodore L. Ross, David M. Young et Gregory Zelesnik en sont les auteurs crédités. Composants et connecteurs y deviennent des constructions parallèles ; les configurations attachent participants et rôles ; les flux de données et l'ordonnancement accèdent au même niveau de description que les appels de procédure.

UniCon avait aussi des limites explicites : un ensemble prédéfini de connecteurs primitifs, pas encore de connecteurs composites, et des échappatoires générales qui réduisaient certaines vérifications. Ces limites montrent justement pourquoi une spécification n'est pas une preuve automatique.

Ni produit, ni magie formelle

Un microservice est surtout une frontière de calcul, de déploiement et de responsabilité. Il ressemble davantage à un composant. Un service mesh ou une passerelle API peut mettre en œuvre transport, identité, routage, télémétrie ou reprise ; il peut réaliser une partie du connecteur sans en constituer toute la définition. L'ordre métier, l'idempotence ou les transitions d'état restent parfois ailleurs.

Le statut de premier rang ne garantit pas non plus une vérification formelle. Une spécification précise peut rendre possible une analyse, un test de compatibilité ou une revue rigoureuse. La force du résultat dépend toujours de la sémantique, de la propriété énoncée et de l'outil.

L'héritage de Shaw est donc une règle d'attention : ne pas réserver tous les noms aux boîtes et laisser la ligne comme ponctuation. Nommer la relation, son protocole et ses rôles ; déclarer l'attachement ; indiquer quelle propriété du système en dépend. C'est souvent entre deux composants localement raisonnables que se cache le contrat le moins raisonnable.

Sources