Le but de cet article est très de permettre à chacun de comprendre (le plus objectivement possible) dans quelle mesure on peut mélanger des logiciels libres avec des plugins propriétaires (toute ressemblance avec DAVDSI est bien entendu fortuite).

Cet article se veut (j'espère le réussir) à la portée de tous, informaticien ou non, et les informaticiens me pardonneront mes explications volotairement un peu simplificatrices.

Explications préliminaires

Je me place dans le cadre de programmes compilés, puisque la notion de plug-in n'a pas vraiment de sens sinon (et puis ca compliquerait trop les choses).

compilation : il s'agit (pour faire simple) du processus qui permet de prendre un fichier de source pour faire des fichiers objets (modules).

édition de lien/link: Il s'agit de prendre plusieurs modules, et de les combiner entre eux pour former l'exécutable ou la biliothèque finale. En gros, un fichier objet fait référence à pleins d'autres morceaux de code, et le link, c'est l'action qui permet de bien vérifier qu'on parle de morceaux de code existants.

une bibliothèque partagée: c'est un morceau de programme, mais qui ne se suffit pas à lui même. Il sert à partager du code entre plusieurs exécutables, mais est inutilisable seul.

C'est ici que résident les subtilités qui nous intéressent: un programme peut utiliser des bibliothèques partagées de deux manières assez différentes :

  1. il laisse des trous en plusieurs endroits, qui font comprendre au système d'exploitation qu'il manque des choses pour que le programme fonctionne. Le système d'exploitation va donc lors de l'exécution d'un programme, aller chercher une bibliothèque partagée, et de remplir les trous du programme avec le code qui s'y trouve. Ca veut donc dire qu'un programme qui utilise une bibliothèque partagée (les fameuses .dll sous windows) a besoin que cette bibliothèque soit là pour fonctionner, sinon... il sera inutilisable. Ce mode d'utilisation demande lors de la compilation d'utiliser une opération appelée "édition de liens dynamiques", qui sert à préparer ces fameux trous.
  2. au lieu de laisser des trous, le programmeur met en place un système qui lui permet de charger dans son programme des morceaux de code qui se trouvent dans des bibliothèques partagées, ce qui lui permet d'étendre les fonctionnalités de son programme. Un plug-in, c'est un morceau de code qui s'insère (plug-in) dans le programme. Si le plug-in n'est pas présent, le programme est tout de même lançable, et selon les programmes, il sera parfois possible de l'utiliser avec des fonctionnalités réduites (c'est à dire sans celles qui sont fournies par le plug-in). La distribution du plug-in est donc théoriquement optionnelle, vu que le programme peut fonctionner sans, et de plus, aucune action n'est nécessaire pendant la compilation.

Voilà, c'était un peu technique, mais il fallait en passer par là. Maintenant, le truc rigolo, c'est que les licence des différents composants (exécutable, bibliothèques, et plug-ins) peuvent être très différents les unes des autres, et les ennuis commencent ...

Salade de licences ... tous les assaisonnements ne sont pas bons.

GNU

Il existe dans le monde du libre, vis à vis de l'utilisation des bibliothèques partagées, deux familles de licences. Celles qui autorisent l'édition de lien dynamiques lors de la compilation avec des bibliothèques propriétaires (type BSD, et LGPL) et celles qui l'interdisent (type GPL, QPL, pour autant que je sache MPL -- la licence de la fondation Mozilla et donc de firefox -- et d'autres).

Les licences de type GPL, imposent que tous les composants qui sont liés à un programme soient libres. Il n'est pas possible de distribuer un logiciel sous une license de type GPL sous sa forme binaire si une des biliothèques nécessaire à son bon fonctionnement n'est pas libre. Ca veut dire qu'un logiciel sous licence de type GPL ne peut pas utiliser de bibliothèque partagée non libre. Il serait alors interdit aux distribuer une forme compilée du programme[1].

Les licences de type LGPL/BSD (pour le soucis qui nous intéresse) elles permettent que des programmes soient liés dynamiquement contre des bibliothèques non libres (parfois avec certaines conditions, mais je ne vais pas entrer dans les détails). Néanmoins ceci sous condition que les bibliothèques non libres concernées permettent un tel mélange !!!

Et là, cher lecteur attentif, tu as vu que j'ai (pas très subtilement) évité de discuter du soucis des plug-ins. En effet, comme il ne s'agit pas d'une édition de liens réalisés lors de la compilation, et donc avant distribution, mais en fait d'une extension du code du programme, faite chez l'utilisateur (et il peut faire ce qu'il veut). C'est donc un problème beaucoup plus flou. Pour les licences de type LGPL/BSD, les plugins ne sont pas un soucis. Pour l'autre famille de licence, ca n'est pas clair du tout.

En effet, pour la GPL par exemple, il existe une FAQ qui traite (entre autres) de ce sujet. Étant technique, il est difficile d'expliquer cette FAQ, je vais donc tenter d'en résumer l'idée : si le programme et son plug-in ont des interactions limitées, alors pas de problèmes. Par contre, si le plug-in remplit des taches vitales du programme, et qu'ils collaborent de manière étroite ensemble, alors il s'agit d'une tentative de contournement de la GPL et c'est interdit.

En gros, ca veut dire que (si macromédia le permet) il est possible de distribuer firefox avec le plugin flash, parce que :

  • le plugin flash ne remplit pas une tache vitale de firefox ;
  • firefox ne dialogue pas de manière soutenue avec le plugin : il ne fait que lui dire que le clavier et la souris ont été utilisés, et permet au plugin d'afficher des choses à l'écran. Tout le reste est interne au plugin, et firefox n'en a cure. Et sans le plugin flash, les pages internets en règle générale sont largement lisibles.

Par contre, pour un logiciel qui permet de lire les DVD, il serait vraissemblablement interdit de distribuer un lecteur en GPL avec un plug-in propriétaire permettant de lire le DRM CSS. En effet, sans ce plug-in, il est impossible de lire la grande majorité des DVD (la plupart des DVD commerciaux sont cryptés). De plus, un lecteur vidéo collabore beaucoup avec ce plug-in : il ne peut rien faire sans son autorisation, ou presque, et ne cesse de lui envoyer des données, que le plug-in décode, etc... Il s'agit d'un échange, d'une collaboration. Dans ce cadre, il est impossible de distribuer conjointement un logiciel en GPL et un plug-in propriétaire qui fait du DRM.

Le problème de base n'est donc pas vraiment que la combinaison de plug-ins et de logiciels libres est impossible, c'est surtout que la redistribution d'un tel programme est bien souvent interdit par sa licence sous forme binaire. C'est d'ailleurs un problème que rencontrent déjà par exemple, les gens qui possèdent des cartes graphiques NVIDIA et ATI sous linux, qui lorsqu'ils utilisent les pilotes du constructeurs (pilotes non libres) sont obligés de compiler ces pilotes eux même[2].

Notes

[1] bien sur le programme pourrait être redistribué sous forme de sources, mais vous compilez votre programmes vous ?

[2] au lieu de les voir intégrés au noyau en standard comme pour le reste des cartes vidéos.