# Silverlight

Silverlight était un plugin pour navigateur web sur Windows et Mac OS X, qui permet de développer des applications Web riches dans un moteur de rendu vectoriel. Il fonctionne de façon similaire à Adobe Flash dont il se veut une alternative. Techniquement, Silverlight est l’équivalent du CLR de Microsoft mais pour les navigateurs Web.
Silverlight avait comme concurrents principaux Adobe Flash, Flex et, dans une moindre mesure, des solutions telles que JavaFX ou QuickTime d’Apple. Tout dépend si l’on se place du côté outil de conception de véritables applications ou de simple diffuseur de média (vidéos, musiques…).
La technologie est encore utilisable dans de nombreux navigateurs (Internet Explorer, par exemple) dans les systèmes d’exploitation Windows et Mac OS X, via l’utilisation d’un plugin, mais pas dans les dernières versions des navigateurs modernes. Silverlight n'est plus supporté dans Google Chrome depuis septembre 2015 (version 45), ni dans Firefox depuis mars 2017 (version 52). Edge, le navigateur par défaut de Windows 10, ne l'a jamais supporté (même s'il provient du même éditeur).
Microsoft a annoncé la fin du développement de Silverlight 5 en 2012, sauf pour les correctifs. Il n'est plus du tout supporté depuis le 12 octobre 2021.
Tout comme pour Flash, les considérations de sécurité et l'évolution des standards Web (dont HTML) sont la cause de son abandon.

## Animation, vidéo, interactivité

Silverlight fournit un système graphique en retained mode (seules les données internes sont modifiées) similaire à WPF. Il intègre le multimédia, les graphiques, les animations et l’interactivité avec l’utilisateur.
Il a été conçu pour travailler de concert avec XAML pour la description de l’interface graphique, et avec les langages Microsoft .NET pour le comportement (partie code). Il reste toujours possible d’utiliser JavaScript comme le permettait la version 1.0 mais ce mode de programmation n’a plus guère d’intérêt depuis le support des langages .NET introduit dans la version 2.0. Silverlight peut aussi être utilisé pour créer de nouveaux gadgets pour le Sidebar de Windows Vista. Silverlight supporte les formats WMV, WMA et MP3 en lecture sur tous les navigateurs, sans avoir besoin d’une installation préalable du Windows Media Player ou des autres plugins habituellement nécessaires. Vu que WMV9 est une implémentation du standard SMPTE VC-1, Silverlight supporte aussi les vidéos VC-1. De nouveaux modes vidéo sont disponibles depuis la version 3.0, voir le site de l’éditeur pour plus de détails notamment le support de la TV HD.
Silverlight rend possible le chargement dynamique du contenu XML, qui pourra être manipulé à travers le DOM, une technique qui est cohérente avec les techniques AJAX usuelles. Le support de LINQ simplifie encore plus la gestion des sources XML. La gestion des données peut aussi s’effectuer via ADOT.NET Data Services (appelé désormais WCF RIA Services ; anciennement Astoria), technologie transformant des modèles Entity Framework en services Web de type REST, le transport des données se faisant dans un format standard AtomPub ou JSON.
Depuis la version 2.0, la logique de programmation peut être écrite en n’importe quel langage Microsoft .NET; sont aussi inclus de nombreux langages dynamiques de programmation comme Ruby et Python, même si ces utilisations restent marginales.

## Compatibilité vidéo et audio

| Format | Statut |
| MPEG1 | N/D |
| MPEG2 | N/D |
| MP3 | Oui |
| MPEG4 | Oui |
| Flash Video | Oui |
| H263 | Non |
| H264 | Oui |
| Theora | Oui |
| QuickTime | Non |
| RealMedia | Non |
| VC-1 | Oui |
| Windows Media | Oui |
N/D : non disponible

## Compatibilité

Il est disponible pour Windows XP, Windows Vista, Windows 7, 8 et 10, Mac OS X 10.4, à l’aide d'un plugin disponible à partir des versions Internet Explorer 6, Safari 1.0 d’Apple, Mozilla Firefox 38 et Google Chrome 41. Une version compatible avec les environnements GNU/Linux, basée sur une implémentation libre de Silverlight 2.0 pour Mono appelée Moonlight fut développée à partir de 2008, avant d'être abandonnée en 2011.
* Le support pour téléphones portables sous Windows Mobile 6, et mobiles Symbian OS (versions 40 et 60) et Android avait été annoncé : « Silverlight (code-name WPF ou encore Windows Presentation Foundation everywhere — pour WPF « partout ») est le nom de code d’une solution navigateur multiplate-forme basée sur XAML qui améliore les présentations à base de contenus riches (2D et 3D, animation, dessin vectoriel, vidéo et audio) en s’affranchissant totalement du code HTML. »
* Opera n'a jamais été supporté officiellement.
* Il n'a jamais été officiellement disponible sous Linux.
* Silverlight pour mobiles était prévu pour exécuter du contenu Silverlight sur des appareils mobiles. Une brève démonstration a été faite à l’occasion des TechDays 2009 mais la CTP pour Windows Mobile 6 n'a jamais été rendu disponible. Nokia a annoncé comme projet de rendre Silverlight pour mobiles disponible pour le S60 sous Symbian, ainsi que pour les appareils Série 40 et les Tablettes Nokia Internet. Silverlight pour mobile aurait dû supporter le contenu Silverlight 2.0.

## Différentes versions
### Silverlight 1.0

Silverlight 1.0 est le framework de présentation du noyau, qui est responsable de l’interface utilisateur, de l’interactivité et des entrées utilisateur, des contrôles basiques de l’interface utilisateur, de l’animation et des graphiques, de la lecture des médias, avec support DRM et intégration DOM. Il est constitué des composants suivants :
* Entrée : prise en charge des entrées des périphériques comme la souris, le clavier, le stylet, etc. ;
* Noyau de l’interface utilisateur : gestion de l’interprétation des images bitmap, des tracés de vecteur, du texte et des animations ;
* Médias : lecture des flux MP3, WMA Standard, WMV7, WMV8, WMV9/VC-1 ;
* XAML : permettant de créer les interfaces utilisateurs en utilisant le langage à balises XAML.
Une application Silverlight commence par l’invocation du contrôle Silverlight à partir d’une page HTML, qui chargera alors un fichier XAML. Le fichier XAML contient un objet Canevas, qui sera le support pour d’autres éléments.
Silverlight fournit de nombreuses primitives géométriques comme des lignes, des ellipses, et d’autres formes, mais aussi du texte, des images, et du média… Les éléments sont disposés de manière à donner la mise en page voulue. N’importe quelle forme aléatoire peut être créée. Tous ces éléments seront animés en utilisant des déclencheurs d’événements. Certains effets d’animation sont prédéfinis, d’autres peuvent être créés, en composant ceux existants. Des événements provenant des actions du clavier ou de la souris peuvent aussi être considérés comme événements, pris en charge par des scripts.
La gestion de l’interface utilisateur est accomplie en utilisant des langages de script pour modifier le DOM de l’objet canevas de Silverlight. Pour faciliter ceci, Silverlight expose une API, accessible depuis n’importe quel langage de script supporté par Silverlight, qui dans sa version 1.0 est limité uniquement au JavaScript tournant sur le navigateur. Par ailleurs, il n’y a pas de widgets embarqués pour l’interface utilisateur. Les widgets natifs du navigateur devront être placés au-dessus de l’objet canevas pour les entrées utilisateurs. Les formats de données sont limités à POX (Plain Old XML) et JSON uniquement.

### Silverlight 2.0 beta 1 (anciennement Silverlight 1.1)

La version 2.0 apporte plus d’interactivité et permet aux développeurs d’utiliser des outils de développement et les langages Microsoft .NET en lieu et place de JavaScript de la version 1.0.
Silverlight 2.0 inclut une version du .NET Framework implémentant entièrement le même CLR que le .NET Framework 3.0. Ainsi, il peut exécuter n’importe quel langage .NET, incluant Visual Basic .NET, C#. Au contraire du CLR inclus dans le Framework .NET, de multiples instances du CoreCLR inclus dans Silverlight peuvent être contenues dans un seul processus. Ceci permet au fichier de mise en page XAML de pouvoir être étendu avec du « code derrière le code » (code behind), écrit en n’importe quel langage .NET contenant la logique de programmation. Il peut être utilisé pour manipuler au même moment l’application Silverlight et la page HTML qui contient le contrôle Silverlight. Le XAML, ainsi que le code est compilé en fichiers exécutables .NET qui seront ensuite zippés dans un fichier portant l’extension xap (qui reste un fichier ZIP standard).
Silverlight tourne avec une bibliothèque légère, possédant de nombreuses fonctionnalités contenant entre autres des contrôles extensibles, des services web XML, des composants réseaux ou des API LINQ pour les bases de données. Cette bibliothèque est un sous-ensemble et est considérablement plus petite que la bibliothèque de base du framework .NET.
Le code Silverlight est sécurisé à plusieurs niveaux, il tourne dans un sandbox ou « bac à sable » qui empêche d’invoquer les API de la plate-forme. Une application Silverlight ne peut donc pas accéder au matériel de l’utilisateur, ni à ses fichiers.
Silverlight 2.0 apporte aussi du support pour les médias DRM.
La version du Framework .NET dans Silverlight comprend en plus un sous-ensemble du modèle de programmation WPF de l’interface utilisateur, incluant un support pour les formes, les documents, les médias et les animations de WPF. Les limites de la version alpha seront levées par la version bêta 1 qui ajoutera plus de 20 contrôles à l’interface utilisateur (incluant les zones de texte, les Checkbox, les contrôles pour calendrier, entre autres), la prise en charge du databinding, une gestion automatique de la mise en page et des contrôles pour la manipulation des données. Les contrôles de l’interface utilisateur sont habillables, en utilisant des modèles librement définis (notion de feuille de style, templating, etc.). La manipulation visuelle d’un projet Silverlight s’effectue à l’aide du logiciel Expression Blend, la partie programmation se faisant sous Visual Studio.
La bibliothèque de base fournit des classes pour les collections, la réflexion, des expressions régulières, les chaînes de caractères et l’accès aux données. Elle supporte aussi LINQ, avec un support total de LINQ to Objects et des arbres d’expression. Presque tous les espaces de noms System.LINQ et System.LINQ.Expression sont exposés. Cependant, LINQ to XML n’était pas disponible dans la version alpha, avant d’être présent dans la version bêta. La bibliothèque de base (BCL) supporte aussi la sérialisation d’objets pour la persistance des données. Silverlight peut aussi supporter les données RSS, POX et JSON, en plus du XML. La BCL fournit un support avancé pour travailler sur des données XML, incluant les classes XMLReader et XMLWriter.
Silverlight inclut aussi des classes pour l’accès aux données à travers des Web Services basés sur du XML (POX), REST et les services WCF. Le support réseau inclus dans Silverlight peut être utilisé par les applications Silverlight pour communiquer à travers le protocole HTTP. Alors que dans la version alpha de Silverlight 2 la communication inter-domaines n’est pas permise, elle est supportée dans la version bêta 1.
Silverlight utilise un format basé sur du XML pour contrôler l’accès aux ressources par domaines interposés. En plus, Silverlight supporte aussi le format Adobe Flash régissant les accès inter-domaines. Silverlight 2 à partir de la bêta 1 ajoute aussi un support pour les communications réseaux, utilisant les XML sockets à travers IPv4 et IPv6. Silverlight 2.0 supporte aussi la programmation asynchrone, par l’utilisation des bibliothèques de « threading ». Cependant, les sockets Silverlight sont plus restrictives. Elles peuvent communiquer uniquement avec l’hôte qui a lancé l’application au départ, et les numéros de port sont restreints du numéro 4502 à 4532. Les prochaines versions pallieront ce problème. Les sockets Silverlight peuvent uniquement initier une connexion, elles ne peuvent être en attente.
Silverlight 2 supporte le DLR, qui permet la compilation dynamique et l’exécution des langages dynamiques. Cependant, le DLR n’est pas inclus initialement dans la distribution Silverlight, une extension supplémentaire appelée Dynamic Silverlight a besoin d’être installée. Les modules spécifiques au langage peuvent être empaquetés avec le DSL dans le package .xap. Le SDK DSL inclut un serveur Web appelé Chiron, qui empaquette automatiquement toutes les dépendances pour l’application DSL avant de la lancer dans le navigateur.
Les premiers langages écrits pour le DLR sont JScript, IronPython 2.0 et IronRuby. Microsoft envisage aussi d’embarquer Visual Basic .NET sur le DLR. Tous les 4 langages partagent la même infrastructure, pour permettre à Silverlight de compiler et d’exécuter la source. Inversement, d’autres langages .NET doivent être compilés avant, et transmis à Silverlight comme des assemblies .NET. L’implémentation du JScript managé est conforme à la spécification ECMAScript 3.0, et Microsoft clame qu’il est 250 fois plus rapide que le JScript interprété.
Avec l’intégration du Framework .NET, Silverlight permet aussi une interaction avec le code HTML managé, qui permet aussi bien la manipulation des éléments HTML du DOM du code implémenté, que l’appel aux objets instanciés par le code implémenté à travers JavaScript. Silverlight encapsule les objets JavaScript et les éléments DOM pour les rendre disponibles dans le code géré. Une application Silverlight n’a pas besoin d’avoir des composants de l’UI pour pouvoir manipuler le DOM du HTML du code géré. Ceci est fait en créant un canevas XAML dont la largeur et la hauteur sont initialisés à 0. Ce code derrière le code permet de modifier le DOM de la page HTML via les API dans l’espace de nom du navigateur.
Silverlight 2 inclut Deep Zoom, une technologie dérivée de Microsoft Live Labs Photosynth. Il permet aux utilisateurs de zoomer sur des images ou un regroupement d’images avec des transitions en douceur, en utilisant le curseur de la souris ainsi que la molette. Les images peuvent mesurer de 2 à 3 mégapixels au gigapixel, mais l’utilisateur n’a pas besoin d’attendre que l’image soit chargée entièrement, car Silverlight charge uniquement les parties visionnées, optimisées selon le niveau de zoom. Silverlight 2 permet aussi de définir un accès restreint aux données systèmes pour les applications Silverlight. La technologie peut utiliser la boîte de dialogue native « Ouvrir un fichier » du système d’exploitation (OS) pour rechercher un fichier. Le fichier sera exempt des informations sur le chemin pour empêcher l’application d’accéder aux informations comme le nom d’utilisateur. Il sera ouvert en lecture seule.
Pour le stockage local des données, Silverlight fournit un stockage local isolé (Isolated Storage) en dehors du cache du navigateur, dans un dossier caché dans le dossier privé de l’utilisateur. Dans la version 2.0, l’isostockage est limité à 1 Mio par URL. Cette limite étant configurable par l’utilisateur (clic-droit sur l’espace de l’application Silverlight). Les données enregistrées par une application Silverlight, identifiées par l’URL d’où elles ont été chargées peuvent être accessibles par cette application seulement. Toutes les instances de Silverlight partagent le même isostockage, permettant à toutes les instances de l’application de partager les mêmes données, même si elles tournent sur de navigateurs différents.
Le CoreCLR Silverlight utilise un modèle de sécurité axé sur l’attribut, par opposition au modèle Code Access Security (CAS) de la version bureau du framework .NET. Tous les assemblies sont marqués avec un attribut de sécurité, qui peut être transparent (SecurityTransparentAttribute), ou critique sûr (SecuritySafeCriticalAttribute) ou critique (SecurityCriticalAttribute). Les méthodes dans les assemblies transparents tournent avec une confiance partielle (partial trust) et de tels assemblages ne peuvent appeler des méthodes critiques. Ils ne peuvent pas non plus contenir du code non vérifié (unsafe) comme les pointeurs) ou invoquer des fonctions systèmes.

### Silverlight 3.0 beta

La version 3 beta a été présentée aux développeurs par Scott Guthrie le 18 mars 2009, lors de la conférence Mix09 à Las Vegas.
Les fonctionnalités sont :
* l’accélération GPU sur l’interface
* le mode « hors du navigateur » qui permet d’installer l’application sur la machine de l’utilisateur en local
* le support du mode déconnecté
* l’indexation de Silverlight comme une page html
* la prise en charge du H264, de l’AAC et du 720p
* le support de la 2.5D qui ajoute des transformations de perspectives en 3D aux objets sans pour autant permettre l’exploitation de véritables objets 3D comme le fait Windows Presentation Foundation (WPF).
* l’apparition d’une version mobile (Windows Mobile, Symbian OS, BlackBerry?)
La version 3.0 finale a été mise en ligne début juillet 2009. Elle confirme les améliorations présentées dans la version bêta.

### Silverlight 4.0 beta

La version 4.0 est sortie en phase beta le 18 novembre 2009. L’une de ses nouvelles fonctionnalités est la prise en charge native du style d’affichage de contrôles RTF (Right To Left), nécessaire pour un affichage optimal d’interfaces dans une locale de type RTF, par exemple en langue hébreu ou arabe. Un support étendu du mode out-of-browser (avec les privilières élevés par exemple) est également à l'ordre du jour.

### Silverlight 4.0 RC

La version 4.0 RC de Silverlight a été annoncé le 16 mars 2010 au MIX 2010. Différentes corrections ont été apportées.

### Silverlight 4.0 finale

La version 4.0 finale a été mise en ligne le 15 avril 2010.

### Silverlight 5.0

La version 5.0 de Silverlight a été mise en ligne le 9 décembre 2011. De nouvelles fonctionnalités sont apparues tel que l'accélération GPU pour l'encodage vidéo, le graphisme 3D, les contrôles de vitesse de lecture et le support 64bit.
Le 15/01/2019, Microsoft a publié une mise à jour pour les calculs de Silverlight DateTime gérant les nouvelles ères japonaises.

## Outils de développement

Les applications Silverlight peuvent être écrites dans n’importe quel langage de programmation Microsoft .NET. De même, n’importe quel outil de développement qui peut être utilisé avec les langages .NET peut fonctionner avec Silverlight, dû au fait qu’il pourra cibler directement le noyau CLR de Silverlight, à la place du CLR .NET.
Les versions 2.0 et 2.5 de Microsoft Expression Blend ont été pensées pour la conception des UI des applications Silverlight 1.0 et 2.0 respectivement. Visual Studio 2008 peut être utilisé pour développer et déboguer les applications Silverlight. Mais il faudra pour cela installer préalablement « The Silverlight tools for Visual Studio ». Les applications Silverlight 3.0 sont programmables avec Visual Studio 2008 moyennant l’installation du toolkit correspondant. Pour la partie visuelle, Expression Blend en version 3.0 est nécessaire.
Un projet Web Silverlight contient d’une part le projet purement Silverlight ainsi qu’un projet ASP.NET exposant l’application dans une page ASPX ainsi qu’une page HTML (au développeur de choisir la version à utiliser). Pour fonctionner les fichiers Silverlight.js et CreateSilverlight.js sont fournis. Ils permettent l’initialisation du plugin Silverlight pour l’utilisation dans des pages HTML. Un composant permettant d’effectuer ces mêmes fonctions directement existe en mode ASP.NET. Il ne s’agit que d’un des modes possibles. Le plus simple étant la génération d’un fichier exécutable Silverlight (extension « .xap », un format ZIP renommé) qui peut être intégré dans une page HTML ou ASP.NET. Que cela soit Visual Studio ou Expression Blend, les outils de développement Silverlight génèrent automatiquement les deux types d’approche. Un projet Silverlight est typiquement constitué de fichier XAML pour l’interface utilisateur (UI) et de fichiers de code pour le code applicatif. Les applications Silverlight sont déboguées de la même manière que les applications .NET. Le « Remote Cross Plattform Debugging » du CLR de Visual Studio peut être utilisé pour déboguer les applications Silverlight tournant sur différentes plates-formes.

## Licence

Une annonce affirmait que Microsoft pourrait donner libre accès à certains composants du code source Silverlight dans une version open source, mais Sam Ramji, directeur de la stratégie technologique chez Microsoft a démenti l’information. Néanmoins, le DLR inclus avec Silverlight est disponible sur le site CodePlex de Microsoft sous la licence Microsoft Public License. La collection de contrôles incluse dans Silverlight 2 est aussi disponible sous la même licence. On notera que la plupart des composants réellement nouveaux (gestion des thèmes, composants riches, etc.) sont tous distribués via le Silverlight Toolkit disponible sur Codeplex en binaire et en source.

## Alternatives

L’équipe Mono a développé durant un temps une implémentation Open source du runtime Silverlight, appelée Moonlight. Le projet était officiellement supporté par Microsoft, qui après un accord avec Novell rendit disponible à Mono des spécifications supplémentaires, en plus de celles déjà rendues publiques, ainsi que des tests. Mono avait également un accès exclusif à l’API de la bibliothèque de base. Moonlight visait l’iso-fonctionnalité avec la dernière version de Silverlight mais un léger décalage compréhensible, le produit original étant toujours disponible avant son adaptation sous Mono. Le développement de Moonlight a été arrêté en avril 2011.

## Critiques

Silverlight a été critiquée comme technologie car elle n’inclut ni Linux ni BSD dans son offre officielle (contrairement à Adobe qui distribue son Flash Player sur Linux). Même si Microsoft a collaboré sur le projet Moonlight, Bruce Chizen, ancien PDG d’Adobe Systems, a rappelé l’obligation de Microsoft de garder la plate-forme Silverlight compatible avec les autres OS en plus de Windows. Ses craintes se basent sur des exemples passés : sans aller au bout, Microsoft a promis plusieurs fois de développer des produits compatibles avec de nombreuses plates-formes.
Le Comité Européen pour les systèmes interopérables craint qu’avec Silverlight, Microsoft cherche à introduire sur le web du contenu qui serait uniquement accessible sur la plate-forme Windows. Ils précisent que l’utilisation du XAML dans Silverlight est positionné pour remplacer la plate-forme croisée HTML standard.
Microsoft a également été critiqué (comme Adobe d’ailleurs) pour ne pas avoir utilisé le standard Scalable Vector Graphics (SVG) dans Silverlight, ce qui, selon Ryan Paul d’Ars Technica, relève du refus de Microsoft d’utiliser des standards Open Source dans ses produits.