Licence et propriété
Pourquoi LRVO est propriétaire, ce que le contrat de licence protège, comment le registre privé fait la vraie barrière, et la politique de licences des dépendances.
LRVO est un produit commercial d'ACARY. Aucun paquet de l'écosystème n'est libre ni open source. Cette page explique le modèle retenu et les contraintes qu'il impose au code.
Deux choses distinctes
Le droit d'auteur est automatique. Le code appartient à ACARY dès son écriture, sans dépôt ni formalité, par l'effet de la Loi sur le droit d'auteur du Canada et des traités internationaux. Le fichier LICENSE n'y ajoute rien.
Une licence fait l'inverse : elle accorde des permissions. MIT, Apache ou GPL autorisent la copie et la redistribution sous conditions. Ne rien accorder est donc le régime par défaut, et c'est celui de LRVO.
Le fichier LICENSE de chaque paquet n'est pas une simple mention « tous droits réservés ». C'est un contrat de licence utilisateur final qui définit ce que le client a le droit de faire : installer, exécuter comme dépendance, exploiter son application. Sans ce cadre, le périmètre du droit d'usage vendu resterait indéfini, et un litige se réglerait sur des présomptions.
Ce que le contrat autorise et interdit
| Autorisé | Installer le paquet, l'exécuter comme dépendance, exploiter l'application, y compris à titre onéreux. |
| Autorisé | Étendre la plateforme par les registres de modules, de widgets et de blocs. |
| Autorisé | Développer pour un client, si ce client a sa propre souscription. |
| Interdit | Redistribuer, republier sur un registre ou un dépôt, revendre, prêter. |
| Interdit | Modifier le code, en dériver une œuvre, faire de l'ingénierie inverse. |
| Interdit | Partager les identifiants du registre privé. |
| Interdit | Offrir le logiciel en service à un tiers sans souscription. |
| Interdit | Développer un produit concurrent, ou entraîner un modèle d'apprentissage automatique sur le logiciel. |
L'exception sur les registres d'extension est structurante. Un client qui déclare un type de post ou un bloc n'écrit pas dans le core, il s'y branche. Le contrat le dit explicitement pour que la limite entre extension et modification ne se discute pas. C'est aussi la raison technique du principe de pureté du core, décrit dans Principes.
Deux obligations du contrat se remarquent moins que les interdictions, mais pèsent autant côté client. Le code, la documentation non publique et les identifiants du registre sont des renseignements confidentiels (article 6) : l'obligation survit cinq ans à la fin du contrat, sans limite de durée pour ce qui relève du secret commercial. Et la résiliation n'est pas un simple arrêt d'usage (article 7.4) : le licencié désinstalle le logiciel de tous ses environnements, détruit toute copie y compris les sauvegardes, et l'atteste par écrit sous trente jours si ACARY le demande. Un client qui audite le contrat avant signature posera des questions sur ces deux points.
La licence ne protège pas, elle donne un recours
Un contrat n'empêche rien techniquement. Il ouvre un recours après la violation, à condition de pouvoir la prouver. La protection réelle vient de trois choses, dans cet ordre :
Le registre privé registry.lrvo.app est la vraie barrière. Sans identifiants, le paquet n'est pas installable. L'administration des comptes et des droits est décrite dans Registre Verdaccio.
Le paquet publié ne contient pas les sources. files ne livre que dist/, .env.example, LICENSE et THIRD-PARTY-NOTICES.md. Le dossier src/ reste dans le dépôt Gitea privé.
Les cartes de source sont désactivées. sourcemap: false dans tsup.config.js évite qu'une carte publiée dans dist/ ne reconstitue le source original.
Une réserve à garder en tête : le build ne bundle pas et ne minifie pas, pour les raisons expliquées dans Build et exports. Le code livré dans dist/ reste donc parfaitement lisible pour qui l'installe. C'est un choix assumé, mais il faut en tirer la conséquence : l'obscurcissement du code ne fait pas partie du dispositif de protection. Ne jamais compter dessus pour dissimuler un secret, une clé ou une logique de vérification de licence.
Chaque paquet porte son exemplaire
@lrvo/core, @lrvo/start et chaque @lrvo/module-* sont des paquets distincts, publiés séparément, installés indépendamment. Chacun embarque donc son propre LICENSE, son propre THIRD-PARTY-NOTICES.md et sa propre section « Licence » dans son README.md.
Un paquet livré sans son contrat serait un paquet installé sans conditions opposables. C'est pour cette raison que LICENSE et THIRD-PARTY-NOTICES.md figurent explicitement dans files, plutôt que de dépendre du comportement par défaut de npm.
Le texte du contrat est identique d'un paquet à l'autre. Il ne nomme aucun paquet en particulier : la définition du « Logiciel » désigne le paquet accompagné du fichier. Une correction du texte se propage donc à l'identique sur les cinq dépôts, sans variante à maintenir.
Politique de licences des dépendances
L'obligation joue aussi dans l'autre sens : ACARY doit respecter les licences des paquets dont dépend LRVO.
Aucune dépendance de production sous licence GPL, AGPL, SSPL, EUPL, CDDL, EPL, MPL, OSL ou CPAL. Ces licences imposeraient au client de publier le code source de son application. npm run build:notices échoue et bloque la publication si l'une d'elles apparaît dans l'arbre.
Le copyleft faible, LGPL, est toléré à une condition : le paquet doit être un binaire chargé dynamiquement, jamais modifié ni lié statiquement. C'est le cas de sharp-libvips, tiré par Next.js pour l'optimisation des images. Le fichier de notices signale ces cas dans une section dédiée.
Le reste, MIT, ISC, BSD, Apache-2.0, ne pose pas de problème de compatibilité. Ces licences imposent seulement de reproduire leur mention de droit d'auteur dans ce qui est distribué.
Une nuance compte ici. Comme le build ne bundle rien, le paquet publié ne contient aucun code tiers : les dépendances sont installées séparément par le gestionnaire de paquets du client, depuis leurs sources d'origine. L'obligation d'attribution n'est donc pas déclenchée par la publication de LRVO. THIRD-PARTY-NOTICES.md reste néanmoins généré et livré, pour deux raisons : prouver au client qui audite qu'aucune dépendance ne contamine son application, et lui fournir la liste dont il a besoin pour ses propres obligations, puisque son build Next.js, lui, bundle ces dépendances.
Le fichier est régénéré à chaque build depuis l'arbre réellement installé, pas depuis les dépendances déclarées. Il ne se modifie jamais à la main.
Contributions
Un salarié cède ses droits à son employeur dans le cadre de ses fonctions. Un pigiste, un stagiaire, un associé ou un contributeur bénévole, non : il reste titulaire du droit d'auteur sur le code qu'il écrit, sauf cession écrite et signée.
Toute contribution provenant d'une personne extérieure à ACARY exige donc une cession de droits signée avant la fusion. Sans ce document, une partie du code de LRVO n'appartient pas à ACARY, ce qui compromet la revente, la levée de fonds et la capacité à agir contre une contrefaçon.
L'adresse postale ne figure pas dans le contrat
Le fichier LICENSE est livré dans chaque paquet npm et se retrouve donc sur le disque de chaque client. Y inscrire une adresse personnelle serait la publier à tous.
Un contrat n'a pourtant besoin que de deux choses sur ce plan : savoir qui concède la licence, et disposer d'un canal pour les avis formels. L'article 11.8 désigne le courriel comme ce canal, avec une règle de réception présumée. L'adresse postale et l'identité légale complète sont fournies sur demande écrite, et figurent au contrat commercial signé, qui est un document privé échangé avec un client payant.
La séparation à retenir : le LICENSE public porte le minimum identifiant, le contrat signé porte l'état civil. Deux documents, deux niveaux de diffusion.
Le siège de l'arbitrage prévu à l'article 12.3 relève de la même logique. Fixé à Québec (Québec), Canada, c'est une ville, pas une adresse : il désigne le district judiciaire de rattachement, et n'expose donc rien.
Notes
Le contrat est rédigé en français uniquement. Ce n'est pas seulement une préférence : la Charte de la langue française impose le français pour les contrats conclus au Québec, et l'article 11.7 acte que les parties l'ont exigé. Un client anglophone qui demande une version anglaise doit obtenir une traduction annexée au contrat commercial signé, pas un second LICENSE livré dans le paquet : deux textes en circulation, c'est deux interprétations possibles et une clause de préséance à arbitrer.
La loi applicable est celle du Québec, avec une clause d'arbitrage plutôt qu'une attribution de compétence à un tribunal. Cette clause évite qu'un client étranger n'attraie ACARY devant sa propre juridiction. Elle ne joue pas contre un consommateur au sens de la Loi sur la protection du consommateur, qui l'interdit, ni pour obtenir une injonction en urgence contre une atteinte à la propriété intellectuelle.
Les clauses d'exclusion de garantie et de limitation de responsabilité comportent une réserve d'ordre public. L'article 1474 du Code civil du Québec interdit d'écarter sa responsabilité pour faute intentionnelle ou lourde, et pour préjudice corporel ou moral. Une clause qui l'ignorerait serait écartée en bloc par un tribunal.
Ce document décrit un dispositif contractuel, il ne constitue pas un avis juridique.