# MediaWiki

MediaWiki est un moteur de wiki pour le Web. Il est utilisé par l’ensemble des projets de la Fondation Wikimédia, des wikis hébergés chez FANDOM, ainsi que par de nombreux autres wikis. Conçu pour répondre aux besoins de Wikipédia, ce moteur est en 2008 également utilisé par des entreprises comme solution de gestion des connaissances et comme système de gestion de contenu. L’entreprise américaine Novell l’utilise notamment pour plusieurs de ses sites web qui véhiculent un trafic important. Des associations comme Wikitravel ou Mozilla l'ont aussi adopté.
MediaWiki est écrit en PHP et peut aussi bien fonctionner avec le système de gestion de base de données MySQL que PostgreSQL. C'est un logiciel libre distribué selon les termes de la GPL.
MediaWiki comporte de nombreuses fonctionnalités pour les sites à vocation collaborative. Par exemple, la gestion des espaces de noms, ou l'utilisation de pages de discussions associées à chaque article.
MediaWiki est intégré, depuis 2018, par l'État français, à la liste des logiciels libres recommandés pour le secteur public et au socle interministériel des logiciels libres.

## Histoire

Initialement, Wikipédia utilisait un moteur de wiki rudimentaire écrit en Perl, appelé UseModWiki. Le 25 janvier 2002, MediaWiki, développé par Magnus Manske, un étudiant allemand de l’université de Cologne, devient le moteur de wiki de l'encyclopédie collaborative pour laquelle il a été développé. MediaWiki a ainsi permis de disposer de plus de fonctionnalités et d’une infrastructure plus extensible (grâce à une base de données MySQL). Les performances du logiciel ont ensuite été améliorées par Lee Daniel Crocker, avant que Brooke Vibber (alors Brion Vibber) n'en devienne la développeuse la plus active et ne prenne le rôle de dirigeante des sorties logicielles.
Depuis la sortie de la première version du script de Manske, plusieurs noms représentatifs de l’état du logiciel lui ont été donnés : « le script PHP », « phase II », « phase III », « le nouveau code source ». Cependant, il n’était pourvu d’aucun nom de produit. Après l'annonce de la création de la Wikimedia Foundation le 20 juin 2003, le wikipédien Daniel Mayer lui donne le nom « MediaWiki », par jeu de mots sur le nom « Wikimedia », et ce nom est progressivement adopté. Pourtant, la similarité des noms MediaWiki et Wikimedia (qui lui-même est déjà semblable au nom Wikipédia) est à l'origine de fréquentes confusions.
Parmi les développements majeurs, citons :
* 2004, système de catégorisation ;
* 2006, analyseur de fonctions ;
* 2008, marquage de révisions ;
* 2011, le ResourceLoader, gestion de CSS et JavaScript ;
* 2013, l'éditeur visuel WYSIWYG.

### Développement

En 2009, MediaWiki comptait :
* environ 129 développeurs ayant accès en lecture/écriture aux codes sources officiels. Ce sont les SVN committers, terme venant de la commande commit du programme subversion, qui permet de transmettre les modifications sur le serveur central ;
* des développeurs d'extensions à MediaWiki, sans privilège sur le dépôt subversion de la Wikimedia Foundation ;
* des utilisateurs et testeurs actifs sur bugzilla, déposant bugs et/ou patchs.
| année | nombre de committers |
| 2002 | 8 |
| 2003 | 18 |
| 2004 | 33 |
| 2005 | 32 |
| 2006 | 58 |
| 2007 | 82 |
| 2008 | 102 |
| 2009 | 129 |
MediaWiki dispose toujours :
* de programmeurs rémunérés ;
* d'une communauté active de bénévoles pour son développement et sa maintenance. Les utilisateurs qui ont apporté des contributions significatives au projet en soumettant des correctifs se voient généralement accorder, sur demande, l'accès aux révisions du dépôt Git/Gerrit.
Les développeurs MediaWiki participent au Google Summer of Code et servent parfois de mentors aux étudiants qui souhaitent travailler sur des projets MediaWiki de base et d'extension.

## Communication
### Identité visuelle

* Logo de MediaWiki
* De l'été 2003 jusqu'au 1er avril 2021.
* Depuis le 1er avril 2021.
Le logo de MediaWiki a été créé par Erik Moeller à partir d’une photographie d’une fleur prise par Florence Devouard (qui est par la suite devenue présidente de la Wikimedia Foundation) et a initialement été soumis au concours international du nouveau logo pour Wikipédia qui s’est déroulé pendant l’été 2003. Le logo s'est placé en troisième position à l'issue de ce concours et a été choisi pour représenter MediaWiki plutôt que Wikipédia, tandis que le logo vainqueur a été adopté pour représenter Wikipédia, et le second vainqueur pour la Wikimedia Foundation. Les doubles crochets sur la photo autour du tournesol symbolisent le wikicode, c'est-à-dire la syntaxe utilisée par MediaWiki pour créer des hyperliens vers les autres pages du wiki. Le tournesol représente la diversité du contenu de Wikipédia, sa croissance et sa liberté.
En 2020, une proposition de changement du logo de MediaWiki est soumis à la communauté Wikimédienne. Un nouveau logo est choisi après deux tours de vote communautaire.
Le logo est changé pour tous les wikis lors de la mise à jour pour la version 1.36 au 1er avril 2021. Ce changement est accompagné d'un guide sur l'usage du nouveau logo.

## Fonctionnalités

MediaWiki est muni d’un ensemble de fonctionnalités élaborées et d’un système d’extensions lui permettant d’intégrer des fonctions supplémentaires.
En raison de la forte présence du plurilinguisme dans les projets Wikimedia, la partie internationalisation a bénéficié d’une attention toute particulière de la part des développeurs. L’interface a été intégralement ou partiellement traduite dans 352 langues et peut être personnalisée par les administrateurs du site.
Wikipédia étant l’un des sites web les plus visités au monde$^,$, les développeurs ont apporté un soin tout particulier à l’extensibilité grâce à un système multicouche de mise en cache et de duplication de base de données.
En 2008, Wikipédia et les autres projets Wikimedia sont toujours à l’origine d’une grande partie des critères de réalisation de MediaWiki.

### Liens libres

Le principal atout de MediaWiki par rapport aux autres moteurs de wiki est l’usage de liens libres au lieu du camel case. Là où habituellement les autres wikis ont besoin d’écrire « WorldWideWeb » en un seul mot pour produire un lien vers la page du même nom, MediaWiki n’impose aucune contrainte, il suffit de placer l’expression que l’on souhaite lier entre doubles crochets. Tous les espaces contenus dans l’expression sont ainsi préservés, comme pour [[World Wide Web]]. Néanmoins, certains caractères ne peuvent pas être utilisés, par exemple # ou |.

### Espaces de nom

En plus des liens, MediaWiki est pourvu de nombreuses autres fonctionnalités pour structurer le contenu. L’une des plus anciennes fonctionnalités est le système d’espace de nom. Pendant longtemps, la séparation des discussions autour de Wikipédia et de son contenu encyclopédique a constitué un réel problème ; de même concernant les pages personnelles des wikipédiens. De façon simpliste, les espaces de nom peuvent se résumer à des préfixes utilisés dans le titre des pages (par exemple « Utilisateur: » ou bien « Discussion: »), ce qui permet à plusieurs pages d'exister sous le même nom (à l'espace de nom près), mais avec des finalités différentes selon le préfixe. Par exemple, la page intitulée « [[Terminator]] » peut décrire le film de 1984 réalisé par James Cameron, tandis que la page « [[Utilisateur:Terminator]] » peut être une page personnelle décrivant un utilisateur ayant choisi ce pseudonyme. Chaque page de Wikipédia est associée à une page de discussion qui a pour but de permettre aux wikipédiens de discuter du sujet de la page.
Par comparaison avec les systèmes de fichiers, les espaces de nom peuvent être assimilés aux dossiers qui permettent de séparer plusieurs fichiers de même nom. Bien qu’il soit possible de rajouter des espaces de nom, leur nombre dans un wiki est habituellement relativement faible.

### Sous-pages

En plus des espaces de noms, les pages peuvent être structurées à l’aide de sous-pages. Une page ayant pour titre « A » peut posséder plusieurs sous-pages dont le titre est alors de la forme « A/x ». La sous-page propose alors automatiquement un lien de retour vers la page mère (de la forme « < A »). Dans cette dernière, on peut accéder à l'une de ses sous-pages en omettant son titre ; ainsi, le lien « [[/x]] » pointera vers la sous-page ayant pour titre « A/x ». Pour un espace de nom donné, le système de sous-pages peut être activé ou désactivé. Par exemple, sur Wikipédia, il est désactivé dans l'espace encyclopédique et activé dans l'espace « Utilisateur: ».

### Catégories

MediaWiki permet aux utilisateurs de créer des catégories. Elles fonctionnent de façon similaire aux tags présents dans de nombreuses applications web et forment une hiérarchie et une description. Dans certains wikis comme Wikipédia, des hiérarchies complexes se sont développées avec ce système sans pour autant qu’une quelconque planification n’ait été établie.

### Interface modifiable

L’interface de MediaWiki peut être intégralement changée directement sur le wiki lui-même par les utilisateurs qui en ont le droit (il s’agit habituellement des personnes qui sont appelées administrateurs ou sysops). Cela se fait grâce à un espace de nom particulier qui correspond au préfixe « MediaWiki: » où chaque page correspond à un message précis de l’interface. À l’origine, l’espace de nom « MediaWiki: » était utilisé pour créer des blocs de texte personnalisés pouvant être chargés dynamiquement dans les autres pages à l’aide d’une syntaxe spéciale. Ce contenu a été déplacé plus tard dans un espace de nom à part appelé « Modèle: ».

### Modèles

Les modèles sont des morceaux de texte qui peuvent être chargés de façon dynamique ou statique dans n'importe quelle page. Pour cela il suffit d’appeler le modèle en écrivant son nom entre doubles accolades (il s’agit en quelque sorte d’un lien spécial). Les modèles possèdent leur propre espace de nom qui correspond au préfixe « Modèle: ». Par exemple pour faire appel dynamiquement au modèle se trouvant à la page intitulée « Modèle:Annexe », il suffit d’écrire « {{annexe}} ». Le contenu du modèle sera ainsi reproduit dans la page où il est appelé, en temps réel. Si des changements sont apportés au modèle par la suite, la page sera également mise à jour automatiquement.
Le modèle peut également être appelé à l'aide du préfixe « subst: » (exemple : {{subst:annexe}}), ce qui aura pour effet de substituer l'appel au modèle par son contenu au moment où la modification est validée. Le résultat est équivalent à un copier-coller du contenu du modèle. Par conséquent, tout changement apporté au modèle n’aura aucun effet dans la page dans laquelle le modèle y a été substitué. La substitution limite la cohérence de l’utilisation des modèles, mais peut être pratique dans certains cas, et est a priori moins gourmande en ressources serveur.
Il est aussi possible de créer des modèles d'un espace de nom autre que modèle. Exemple : Toto est administrateur. Il souhaite annoncer facilement à un utilisateur qu'il le bloque et peu d'utilisateurs ont l'occasion d'utiliser ce modèle : il peut le créer dans son espace utilisateur sous un nom du type [[Utilisateur:Toto/Blocage]]. Il pourra alors l'utiliser sous la forme {{Utilisateur:Toto/Blocage}} ou {{subst:Utilisateur:Toto/Blocage}}. Il n'est pas possible d'insérer des portions d'articles de l'espace encyclopédique ou de pages de discussions sous forme de modèle ou de substitution de modèle.
Les modèles sont utilisés de nombreuses manières différentes, par exemple :
* l’identification de problème avec un article de Wikipédia en plaçant un modèle dans l’article. Le modèle produit un bandeau indiquant le type de problème rencontré dans l’article, et si le modèle a été prévu pour, la page peut être automatiquement catégorisée de sorte que tous les articles sur lesquels ce modèle est apposé soient tous regroupés dans une même catégorie ;
* la création de tables ayant une syntaxe compliquée, et dont l'utilisation est rendue simple dans les pages par l'utilisation de paramètres.

### Scripts

Avec l'installation de MediaWiki, et sa configuration, chaque wiki peut posséder une personnalisation en JavaScript, et CSS. Un espace de nom peut aussi être créé, appelé « Module », pour invoquer des scripts en langage Lua sur des modèles, avec la commande {{#invoke|Script|argument1|...}}.

### Multimédia

Comme le laisse supposer le nom MediaWiki, l’un des points forts du logiciel est sa capacité à gérer une grande diversité de fichiers multimédias (ces derniers peuvent être envoyés sur le wiki directement grâce à l’interface), en particulier les fichiers d'images, mais aussi les sons (au format Ogg). Si le logiciel est bien configuré, il est alors relativement facile de produire des galeries d’images et des vignettes. Le logiciel gère également les métadonnées Exif. La nécessité de faire tourner Wikimedia Commons (l’une des plus grandes archives de média de contenu libre) avec MediaWiki a été source d’apport en fonctionnalités de ce type.
En février 2008, Florence Devouard annonce la prochaine apparition d'une forme de vidéo collaborative sur Wikipédia. Il s'agirait d'utiliser un logiciel libre conçu par la société Kaltura.

### Tel-quel (WYSIWYG)

* L'éditeur WYSIWYG utilisé sur Médiawiki / Wikipédia est appelé en anglais « visual editor ».
* L'éditeur est appelé en français « éditeur visuel ».
Depuis 2015, MediaWiki est pourvu d’une interface de modification des articles en WYSIWYG, nommée VisualEditor.

### Sections

Il est possible avec MediaWiki de modifier une partie d’une page (une section), ce qui permet notamment de modifier plus facilement et de façon concurrente des pages longues. En effet, si un utilisateur tente de valider des changements sur une page alors qu'un autre utilisateur l'a modifiée entretemps, il se produira alors un « conflit d'édition », et l'utilisateur devra effectuer une manipulation pour intégrer ses changements à la nouvelle version. En revanche, si deux utilisateurs modifient en même temps deux sections différentes d'une même page, ce problème ne se posera pas.

### Contenu élaboré

MediaWiki est également muni de fonctionnalités permettant de gérer du contenu élaboré grâce à une syntaxe spéciale. Par exemple, le logiciel permet de produire des formules mathématiques à l’aide de LaTeX et d’un analyseur syntaxique écrit en OCaml. D’autres fonctionnalités de la sorte existent sous forme d’extension, notamment les frises chronologiques, le tracé de courbes mathématiques, les partitions de musique ou encore les hiéroglyphes égyptiens.

### Interface personnalisable

Si l’option est activée, les utilisateurs peuvent aussi personnaliser leur feuille de style et configurer du code JavaScript du côté du client pour qu’il soit exécuté sur chaque page visitée. Par exemple, le système de navigation par pop-up de Lupin est un outil JavaScript qui montre des aperçus d’articles lorsque l’utilisateur passe la souris au-dessus d’un lien, et donnent également des liens vers les tâches de maintenance habituelles. wikEd en est un autre exemple, un éditeur de texte intégré à MediaWiki, qui ne fonctionne qu'avec les navigateurs web de la famille Mozilla, avec de nombreuses fonctionnalités qui apporte la coloration syntaxique et des fonctions de rechercher et de remplacement.

### Groupes et droits d'accès

Bien que MediaWiki possède de base un ensemble de fonctions liées à la restriction, l’accès et la définition de groupes d’utilisateurs, le contrôle de l’accès aux pages ne semble pas constituer un élément de haute priorité dans le processus de développement. Par exemple, il n’est pas possible de définir des permissions d’accès aux pages en fonction de l’espace de nom. D'autres moteurs de wiki, comme TWiki et MoinMoin, apportent plus de puissance en gérant des mécanismes de sécurité avancés comme des listes de contrôle d’accès.

### Extensions

Le code source de MediaWiki contient plusieurs « crochets » (« hooks » en anglais) auxquels peut être attaché du code supplémentaire. Cela permet aux programmeurs d’écrire des extensions sans changer la base ou sans les obliger à soumettre leur code à un contrôle de révision. La plupart du temps, installer une extension revient à ajouter une ligne de code informatique dans le fichier de configuration, bien que dans certains cas, des changements au niveau de la base de données soient en plus nécessaires.
De nombreuses extensions disponibles sont de simples scripts permettant d’intégrer du contenu comme des fichiers Adobe Flash ou des formulaires HTML. D’autres scripts ajoutent de nouveaux comportements compliqués à la syntaxe wiki. C’est le cas de Semantic MediaWiki qui donne la possibilité d’ajouter des relations structurées et recherchables et des attributs aux pages wiki (voir : Web sémantique). La Wikimedia Foundation détient un serveur sur lequel de nombreuses extensions sont hébergées.

## Performances

Étant donné que MediaWiki est utilisé pour faire tourner Wikipédia, qui est un des dix sites les plus visités au monde, les performances du moteur et son extensibilité ont été optimisées de façon accrue. MediaWiki gère les caches Squid, les duplications de bases de données avec répartition de charge, la mise en cache du côté du client, le memcached ou la mise en cache basée sur les tables pour les traitements fréquemment consultés ou les résultats de demandes courantes, sous la forme d’un fichier de cache statique, avec des fonctionnalités réduites, la compression des vieilles versions, et une file d’attente des tâches pour les opérations de base de données.
Il se peut que MediaWiki soit surdimensionné pour un usage de taille réduite, car son large ensemble de fonctionnalités et son interface ont un coût en matière de performance. D’un autre côté, le logiciel convient parfaitement pour les opérations des fermes wikis, comme les projets Wikimedia et la famille de langue. Cependant, MediaWiki n’est pas pourvu de fonctionnalités pour gérer de telles installations.

## Limites

Plusieurs remarques peuvent être faites à propos de MediaWiki : sa documentation est majoritairement disponible sur Internet, mais elle n'est pas propriétaire (des dizaines d'auteurs ont participé à sa rédaction). L'installation et l'utilisation du logiciel MediaWiki ne sont pas très intuitives pour un utilisateur inexpérimenté.
Il n'y a pas de définition formelle de la syntaxe de MediaWiki ; la syntaxe valide est celle reconnue par le code PHP de l'analyseur syntaxique, et il se peut qu'une définition de la syntaxe sous la forme EBNF soit impossible. C'est entre autres pour cette raison que produire un éditeur WYSIWYG ou une adaptation complète de l'analyseur pour d'autres langages de programmation est une tâche difficile.
De plus, il n'existe pas de solution satisfaisante pour mettre en place une liste de contrôle d'accès.
L'usage de deux types de liens (simples crochets pour des liens externes, doubles crochets pour des liens internes) est source de confusion et dispensable, comme l'a montré Wikicréole.