La plupart des produits vendus aujourd'hui contiennent du code. Parfois quelques kilo-octets sur un microcontrôleur, parfois une application complète et son compagnon mobile. L'acheteur négocie soigneusement l'objet physique et hérite du code par accident, parce qu'il arrive déjà écrit, dans un échantillon qui fonctionne. Le moment où ce n'est plus un détail est celui où l'on veut modifier quelque chose — et la position de négociation a déjà disparu.
Trois situations, et ce ne sont pas des variantes l'une de l'autre
Avant de demander qui possède quoi, établissez dans laquelle des trois vous êtes. Les acheteurs croient couramment être dans la troisième alors qu'ils sont dans la première, parce que le produit porte leur marque et leurs libellés de menu.
| Situation | Qui a écrit le code | Ce que vous pouvez raisonnablement demander |
|---|---|---|
| L'usine fournit son firmware | L'usine ou son fournisseur de composant, bien avant votre arrivée | Un binaire compilé, un numéro de version, un journal des modifications, et le droit de continuer à l'utiliser. Les sources s'obtiennent rarement, et le plan honnête suppose que vous ne les aurez pas |
| L'usine l'écrit pour vous | Les ingénieurs de l'usine, sur votre spécification, payés par vous d'une manière ou d'une autre | La propriété ou une licence large, les sources, l'environnement de compilation et le droit de le faire modifier ailleurs — le tout nommé au contrat, avant le début des travaux |
| Vous apportez le code | Vous, ou un développeur que vous payez directement | Une procédure de remise propre : ce que vous livrez, comment c'est chargé, qui détient les clés de signature, et ce que l'usine n'a pas le droit de faire de ce qu'elle reçoit |
Ce qu'il faut obtenir par écrit, quelle que soit la situation
La liste ci-dessous n'est pas un document juridique ; c'est l'ensemble des questions dont les réponses décident de ce que vous pourrez faire dans deux ans. Posez-les au moment du devis, quand l'usine veut la commande. Les poser après la première série transforme une clarification de routine en renégociation.
- Les sources, et dans quel état : un dépôt que vous pouvez compiler, pas un dossier de fichiers envoyé une fois.
- La chaîne de compilation : compilateur et version, configuration, et les étapes exactes qui transforment les sources en binaire réellement chargé dans le produit.
- Les clés : qui détient les clés de signature et de chargement, et si un tiers peut produire un binaire que le produit acceptera.
- Le droit de faire évoluer, et de le faire faire par un autre — c'est la seconde moitié de la phrase qui saute.
- Les composants tiers : quelles bibliothèques et quelles piles sont incluses, sous quelles licences, et ce que ces licences exigent de vous lorsque vous vendez le produit.
- La documentation : plan mémoire, protocoles, signification des codes d'erreur, et comment reconstruire une unité à partir de rien.
- Où vit le back end, s'il y en a un : quels serveurs, quel compte, quel domaine, et ce que deviennent les données.
Quand les sources ne peuvent réellement pas être remises — cela arrive, et c'est parfois légitime — le repli est le dépôt chez un tiers : le code est déposé et vous est libéré sur des événements définis, par exemple la cessation d'activité du fournisseur ou son incapacité à maintenir le produit. C'est une protection plus faible que la propriété et elle se met en place quand les relations sont bonnes, mais elle vaut infiniment mieux que l'alternative habituelle, qui est rien.
Ce qui arrive quand on veut changer d'usine
Changer de fournisseur de matériel est un exercice connu : on récupère l'outillage, on remet les plans, on requalifie les pièces et on accepte une première série difficile. Changer de fournisseur quand on ne possède pas le firmware est un autre exercice, parce que la nouvelle usine peut copier l'objet et ne peut pas copier le comportement. Ce que l'on déplace réellement, ce n'est pas le produit, mais la moitié de celui-ci que l'on sait documenter.
Les symptômes se reconnaissent. Des unités qui fonctionnent mais échouent à un test que les précédentes passaient. Une option de menu que personne ne sait expliquer. Une étape d'étalonnage qui n'existait que dans un script, sur la machine d'un ingénieur. Et, au pire moment, un parc de produits déjà vendus qui ne peut plus recevoir de correction, parce que le seul capable de produire un binaire valide est le fournisseur que vous venez de quitter.
Les mises à jour après vente, qui sont un engagement et non une fonction
Un produit qui peut être mis à jour est un produit qui doit l'être. Dès lors qu'un défaut peut être corrigé à distance, les clients, les distributeurs et, dans certains cas, les autorités s'attendront à ce qu'il le soit. Cette attente survit à la relation avec l'usine qui a écrit le code, et c'est pourquoi le chemin de mise à jour est un sujet contractuel avant d'être un sujet technique.
- Qui peut produire une mise à jour que les produits installés accepteront, et pour combien de temps cela reste vrai.
- Ce que cela coûte par version, et si les corrections des défauts du fournisseur lui-même sont facturées.
- Comment une mise à jour atteint un produit déjà installé chez un client, et ce qui se passe si elle échoue à mi-parcours.
- Qui est informé de quoi : un historique de versions que vous pouvez montrer à un client, à un distributeur ou à une autorité.
Une question sépare un produit qu'on possède d'un produit qu'on loue : si ce fournisseur disparaissait demain, quelqu'un d'autre pourrait-il produire une mise à jour valide pour les unités déjà vendues ? Si la réponse est non, le code n'est pas le vôtre, quoi qu'en dise la facture — et mieux vaut le savoir avant que la réponse soit mise à l'épreuve.
Rien de tout cela n'exige une conversation hostile. Une usine qui écrit du bon firmware accepte généralement de dire à qui il appartient, ce qui est inclus et ce que coûte une modification, à condition que la question soit posée simplement et tôt. Ce qui casse les relations, c'est de découvrir au bout de deux ans que chacun supposait une réponse différente, et que les deux étaient sincères.