MozFR

Tester Firefox

Firefox 2019 : logos et textesAlors que Mozilla annonce une version stable de Firefox toutes les 4 semaines pour sa version pour ordinateur, ses développeurs et développeuses rappellent l’importance de tester les préversions, surtout pour un programme complexe comme un navigateur web.

Pour les particuliers, tester un logiciel permet de faire remonter à son éditeur les problèmes à temps pour que ses développeurs et développeuses puissent les régler avant la sortie. Cela permet aussi de confronter le programme à de nombreux environnements en situation réelle d’une façon que les équipes de développement et de tests en interne ne pourraient pas reproduire.

Si vous développez un site web ou des extensions, utiliser Nightly vous permet de tester la compatibilité au plus tôt ou bien de commencer à développer des fonctionnalités qui font appel à des technologies qui viennent d’être ajoutées à Nightly.

Ainsi, il arrive fréquemment de découvrir, par exemple, que l’utilisation de tel antivirus sur tel système d’exploitation provoque des incompatibilités avec une version de Firefox fraichement sortie. Imaginez le nombre de combinaisons possible à tester par les dev de Firefox rien qu’avec ces deux variables.

Vous pouvez aussi rencontrer des chaînes de caractères en anglais pendant quelques jours, mais rien de bien gênant, les traductions arrivant rapidement et les nouvelles chaînes étant introduites au fur et à mesure du passage en Nightly.

Les phases de test sont le bon moment pour que vos préoccupations soient prises en compte dans la conception et le développement des fonctionnalités. C’est vraiment le moment où vous pouvez faire la différence.

Firefox a besoin de vous. Nous avons besoin de vous.

Firefox pour ordinateur

Sur ordinateur, Mozilla propose Firefox pour les systèmes d’exploitation Windows, macOS et Linux. En plus de la version stable, toutes les 6 à 8 semaines et bientôt tous les mois, la version suivante entre dans le canal bêta depuis le canal Nightly. Ainsi actuellement, Firefox stable est la version 69, la version bêta porte le numéro 70 et Firefox Nightly le numéro 71.

Tableau des dates de sortie de Firefox pour tous et toutes et les canaux de préversions pour 2019 et 2020

Logo 2019 de Mozilla Firefox bêtaVous pouvez donc tester la version bêta en plus de votre version stable. Cette version est relativement stable, les nouvelles fonctionnalités ayant maturé le temps nécessaire dans le canal Nightly.

Une version spéciale pour les développeurs et développeuses est aussi basée sur le canal bêta, la Developer Edition. Elle reçoit le Firefox venant du canal Nightly une semaine avant Firefox bêta qui le reçoit la semaine du passage du train (Nightly ➡️ Bêta ➡️ Stable).

Le canal Nightly reçoit au moins deux mises à jour par 24 heures, pour couvrir tous les fuseaux horaires des dev travaillant dans le monde entier sur Firefox. Firefox Nightly est lui aussi relativement stable, les développeurs et développeuses de Firefox travaillant d’abord sur des versions spéciales avant de passer les nouvelles fonctionnalités en Nightly, et là encore elles débutent souvent cachées derrière une préférence elle aussi cachée. Pourtant, il faut vous attendre à des dysfonctionnements, des plantages et même l’arrêt complet du navigateur avec perte de données en Nightly (de toute façon vous faites des sauvegardes, n’est-ce pas ?).

Bienvenue dans Nightly

Vous aurez un profil (là où se trouvent vos données personnelles pour Firefox) différent par installation de Firefox. Vous pouvez partager la plupart de vos données personnelles entre les profils en utilisant Sync, le service de synchronisation de Mozilla, grâce au compte Firefox.

Créer un compte Firefox dans Firefox Nightly

Téléchargement

Comme toujours, téléchargez les logiciels uniquement depuis le site de leur éditeur :

Vos retours d’expérience

Cette page vous donne les possibilités pour signaler les problèmes et discuter avec d’autres utilisateurs et utilisatrices de Nightly en français.

Un blog – Firefox Nightly News – vous donne des nouvelles régulières du développement de Firefox et des fonctionnalités à tester dans Nightly.

Firefox Nightly est aussi sur Twitter et on vous y répond.

Firefox pour Android

Apple refusant les moteurs d’affichage concurrents au sien sur iOS, nous ne parlerons donc pas de Firefox pour iOS.

Firefox Preview : écran d'accueilMozilla est lancé sur Android dans un grand renouvellement des bases de ses applications, un peu comme le projet Quantum renouvelle Firefox pour ordinateur. Le projet a « Fenix » comme nom de code interne. Le futur Firefox pour Android bénéficiera d’ailleurs des gains de performances du projet Quantum.

En effet, le prochain Firefox pour Android sera basé sur les Mozilla Android Components et GeckoView, le moteur d’affichage mobile de Mozilla. Une réflexion sur l’interface est aussi à l’œuvre avec, par exemple, une barre d’adresse et de recherche placée en bas de l’écran pour un accès plus facile.

Mozilla demande des retours sur la version en développement en ayant fait appel aux bêta-testeurs volontaires, et récemment a publié une version Nightly sur le Play Store.

Firefox Preview

Cette version s’appelle Firefox Preview pour bien mettre en avant que c’est une version en développement qui n’atteint pas les standards de Mozilla pour la mise en production.

L’ancienne version de Firefox pour Android est entrée dans une phase de maintenance sans travail sur de nouvelles fonctionnalités. Firefox pour Android sur le Play Store est désormais basée sur la dernière version ESR (version longue durée) de Firefox. Elle reçoit ainsi toujours des mises à jour de sécurité. Vous pouvez donc utiliser Firefox pour Android en toute confiance, mais tester sa version Nightly n’est plus vraiment utile.

Firefox Preview Nightly

Au lieu de cela, Mozilla est très preneur de vos retours d’expérience ou même uniquement de l’utilisation de Firefox Preview Nightly mise à jour tous les jours.

Vous pouvez envoyer vos retours d’expérience en anglais par courriel ou sur Github.

Firefox Preview est aussi sur Twitter.

Pour toutes les informations en français sur le projet Mozilla, vous avez @MozillaZineFr sur Twitter et notre compte Mastodon @Mozilla@Mamot.fr.

Données d’utilisation

Comme vous pouvez le voir dans les paramètres de sécurité et de vie privée, les versions Nightly de Firefox ont la télémétrie activée dès l’installation. La collecte est régie par les politiques de Mozilla et construite selon les principes des lean data. Découvrez les 5 principes qui guident Mozilla quand il est question de vos données.


La politique de confidentialité de Firefox sur YouTube (5 vidéos de 15 s)


Utilisez les versions de test de Mozilla et commencez à participer au développement de vos futurs Firefox. Firefox pour vous et par vous !


Mozinet

Précédent article sur Firefox : Nouvelles versions de Firefox : un cycle plus rapide de 4 semaines

Nous livrons habituellement une nouvelle version majeure du navigateur Firefox (pour ordinateur et Android) toutes les 6 à 8 semaines. Développer et sortir des versions d’un navigateur est compliqué et mobilise de nombreux protagonistes. Afin d’optimiser le processus et le rendre plus fiable pour tous les utilisateurs et…

Crédit illustrations : les captures sont disponibles sous licence CC0.

Les marques et logos de Firefox sont détenus par la fondation Mozilla.

Nouvelles versions de Firefox : un cycle plus rapide de 4 semaines

Les boîte À propos de Firefox Nightly, Firefox Developer Edition et Firefox bêtaSur les blogs Future Releases et Mozilla Hacks, le 17 septembre 2019,

Panorama

Nous livrons habituellement une nouvelle version majeure du navigateur Firefox (pour ordinateur et Android) toutes les 6 à 8 semaines. Développer et sortir des versions d’un navigateur est compliqué et mobilise de nombreux protagonistes. Afin d’optimiser le processus et le rendre plus fiable pour tous les utilisateurs et toutes les utilisatrices, nous avons développé avec le temps une stratégie de diffusion progressive qui comprend des canaux de préversion : Firefox Nightly, bêta et Developer Edition.

Annonce du jour

Nous sommes ravis d’annoncer aujourd’hui que nous passons à un cycle de sortie de quatre semaines ! Nous ajustons notre cadence afin d’accroitre notre agilité et vous apporter de nouvelles fonctionnalités plus rapidement. Depuis quelques semaines, nous avons reçu de nombreuses demandes pour mettre les nouvelles fonctionnalités plus tôt sur le marché. Les équipes de développement de fonctionnalité travaillent de plus en plus sous forme de sprints qui se synchronisent mieux avec des cycles de sortie plus courts. Compte tenu de tous ces éléments, il est temps de changer notre rythme de diffusion.

À partir du premier trimestre 2020, nous comptons livrer une version majeure de Firefox toutes les quatre semaines. Le rythme de sortie de la version ESR (édition longue durée pour les entreprises) restera le même. Au cours des prochaines années, nous prévoyons une version ESR tous les douze mois avec un chevauchement de trois mois entre la nouvelle version ESR et la fin de vie de la précédente. Les deux prochaines versions majeures ESR sortiront probablement en juin 2020 et juin 2021.

Des cycles de diffusion plus courts offrent une flexibilité plus importante pour prendre en charge la planification produit et les changements de priorité dus aux impératifs commerciaux et aux contraintes du marché. Avec des cycles de quatre semaines, nous pourrons être plus agiles et livrer des fonctionnalités plus rapidement, tout en conservant la rigueur et la vigilance indispensables à une version stable de grande qualité. Nous pourrons aussi mettre les nouvelles fonctionnalités et l’accommodement de nouvelles API plus vite entre les mains des développeurs et développeuses (c’est par exemple ce que nous avons fait récemment avec les mises à jour et la mise en œuvre des nouvelles spécifications CSS).

Afin de garantir la qualité et réduire les risques dans un cycle raccourci, nous devons :

  • nous assurer que la productivité de l’ingénierie de Firefox n’est pas affectée ;
  • accélérer la boucle de retour d’expérience du déploiement à la résolution en passant par la détection ;
  • être capables de contrôler le déploiement des fonctionnalités selon leur maturité lors des lancements ;
  • veiller à la réalisation des tests suffisants des fonctionnalités plus importantes qui couvrent plusieurs cycles de sortie ;
  • disposer de processus d’atténuation et de décision clairs et cohérents.

Déploiements de Firefox et expérimentations de fonctionnalités

Avec un cycle bêta plus court, la prise en charge des personnes utilisant nos canaux de préversion est essentielle, y compris la prise en charge des développeurs et développeuses sur Firefox bêta ou Developer Edition. Nous voulons leur fournir les correctifs aussi vite que possible. Aujourd’hui, nous expédions deux versions bêta par semaine. À l’avenir, nous passerons à des versions bêta plus fréquentes, comme nous le faisons actuellement avec Firefox Nightly.

Le déploiement progressif des fonctionnalités pérennisera nos bonnes pratiques. Cette approche contribue à réduire les perturbations (en matière de qualité, de stabilité ou de performance) pour les personnes qui utilisent Firefox en fin de chaîne. Par exemple, si une fonctionnalité est identifiée à haut risque, nous planifierons un déploiement lent pour les utilisatrices et utilisateurs finaux et nous la désactiverons de manière dynamique si nécessaire.

Nous continuerons à encourager une culture d’expérimentation et des tests A/B avant la sortie en version finale. La durée actuelle des expérimentations n’est pas liée à la longueur du cycle de sortie et ne sera donc pas touchée par ce changement. La durée de l’expérimentation est en fait principalement un facteur de temps nécessaire au recrutement des utilisateurs ou utilisatrices, au déclenchement de l’étude, à l’expérimentation et à la collecte des données nécessaires suivie de leur analyse, pour une prise de décision effective.

Malgré des cycles de sortie plus courts, nous nous efforcerons de localiser toutes les nouvelles chaînes de caractères dans toutes les langues prises en charge par Firefox. Nous accordons une grande valeur à toutes nos utilisatrices et tous nos utilisateurs finaux du monde entier. Nous allons donc continuer à vous régaler avec des versions localisées de Firefox.

Calendrier de sortie de Firefox 2019-2020

L’ingénierie de Firefox déploiera ces changements progressivement à compter de Firefox 71. Notre objectif est d’atteindre le rythme de sortie de quatre semaines pour le premier trimestre 2020. Le tableau ci-dessous contient les versions de Firefox et leurs dates de lancement prévisionnelles. Veuillez prendre en compte que ces informations sont susceptibles d’être modifiées pour des raisons commerciales.

Tableau des dates de sortie de Firefox pour tous et toutes et les canaux de préversions pour 2019 et 2020

Mesure de la qualité des processus et des produits

À mesure que nous réduirons lentement la durée du cycle de sortie, de sept semaines à six puis cinq et enfin quatre semaines, nous continuerons à tout observer de près. Nous regarderons des aspects comme le périmètre de la version, l’impact sur la productivité des développeurs et développeuses (fermeture de l’arbre ou échecs des compilations), le taux d’utilisation en bêta (remontées ou nouvelles régressions) et la stabilisation globale de la version et sa qualité (stabilité, performances ou régressions reportées). Notre objectif principal est d’identifier les goulets d’étranglement qui nous empêchent d’être plus agiles dans notre rythme de sortie. Si nos indicateurs révèlent une évolution inattendue, nous mettrons en place des mesures de correction appropriées.

Enfin, les projets qui utilisent des versions grand public ou ESR de Firefox, tels SpiderMonkey et Tor, devront produire des versions plus fréquentes pour rester en phase avec Firefox. Ces versions sortant toutes les quatre semaines seront les versions de Firefox les plus stables, les plus rapides et de meilleure qualité.

En conclusion, nous espérons que vous apprécierez le nouveau rythme des versions de Firefox. Vous pouvez toujours consulter la page https://wiki.mozilla.org/Release_Management/Calendar pour disposer des dernières dates de sortie et autres informations. Vous avez des questions ? Envoyez-nous un courriel en anglais à l’adresse release-mgmt@mozilla.com.

Auteurs

À propos de Ritu Kothari

Ritu dirige l’équipe de gestion des sorties et versions.

À propos de Yan Or

Yan dirige l’équipe de l’intégrité produit pour Firefox


Le gras a été ajouté à la traduction tout comme la première image d’illustration, disponible sous licence CC By 4.0+.


Traduction et relecture : Mozinet, YD et anonymes

Comment ai-je pu cliquer là-dessus ? Vos regrets sur YouTube nous intéressent

Vos regrets YouTube

Vos regrets sur YouTube nous intéressent

Racontez-nous  

Bonjour,

Nous avons tous et toutes des regrets.

Comme cette nuit où, à 2 heures du matin, j’ai recherché sur YouTube « Des extraterrestres ont-ils construit Stonehenge ? », et depuis, mes recommandations YouTube ne ressemblent plus à rien : des vidéos sur l’affaire Roswell, les Reptiliens, les Illuminati… Ce n’est pas ce que je voulais.

Vous avez une anecdote sur vos regrets YouTube ? Racontez-nous

Le moteur de recommandation de YouTube peut conduire les utilisateurs et utilisatrices vers d’étranges recoins du site, et ce n’est pas toujours sans risque. Récemment, une femme qui s’était endormie en regardant des vlogs beauté a déclaré s’être réveillée en train de regarder des vidéos conspirationnistes sur la Zone 51. Un adolescent n’ayant pas le moral a recherché « dépression » et YouTube l’a conduit vers des vidéos où les créateurs de contenu recherchent les plus vulnérables pour partager leurs messages de haine et de violence.

Comme nos chercheurs, ici chez Mozilla, incitent YouTube à être plus ouvert sur la façon dont les choses fonctionnent et à comprendre comment les recommandations peuvent être moins toxiques, nous souhaitons savoir quels sont vos regrets concernant YouTube. Quelle est la vidéo sur laquelle vous avez cliqué et qui vous a soudainement envoyé·e vers un recoin de YouTube où vous n’aviez pas l’intention d’aller ou qui a influé de manière négative sur vos recommandations ?

  Partagez vos regrets concernant YouTube  

Le 20 septembre, nous aurons une réunion avec YouTube. Lors de cette réunion, nous prévoyons de leur demander de s’engager sérieusement à travailler avec les chercheurs pour résoudre ce problème de contenus toxiques accentué par leur algorithme de recommandation. Vos anecdotes nous aideront à documenter les expériences réelles des utilisateurs et utilisatrices de YouTube afin que nous puissions les inciter à faire des recommandations de manière responsable.

Merci à vous,
Brandi et l’équipe Mozilla


Traduit par la communauté Mozilla francophone

Vous pouvez vous inscrire aux messages de Mozilla et les recevoir directement dans votre boîte aux lettres électronique.

Common Voice : 1 an après

robot grandi Il y a environ un an, nous vous incitions à participer au projet Common Voice en faisant des dons de voix. Il est temps de faire un point sur ce projet.

Pour rappel, Common Voice est une initiative de la fondation Mozilla pour aider les machines à apprendre comment parlent les vraies personnes. En un an, le projet a bien progressé, mais ce n’est pas suffisant pour disposer d’un jeu de données opérationnel. Il nous faut bien plus d’heures parlées et validées. Plus les contributions seront de qualité, moins il y aura de rebut. Suivez notre mode d’emploi.

stat langue Française le 01 septembre 2019

Comme le montre ce graphique, il y a des différences entre le nombre d’heures enregistrées et le nombre d’heures validées. L’écart était beaucoup plus important ces derniers mois et a vu une diminution ces dernières semaines.

La variation de la courbe montre une participation et des niveaux différents avec un jeu de données d’erreurs importantes.

Cette différence provoque un ralentissement de la qualité du jeu de données, et ralentit la progression du projet de transcription vocale appelé Deep Speech.

tableau de bord Common Voice

Un tableau de bord

L’accès au tableau de suivi des activités se fait en cliquant sur votre compte. Il bénéficie de beaucoup d’attention des équipes qui travaillent à son amélioration pour tous et toutes.

Statistiques

Les statistiques proposent vos échantillons validés et parlés par jour et ceux produits globalement par langue comme le français.

Enfin, les contributeurs et contributrices remarquables sont listés dans 2 classements : les échantillons enregistrés et les validés. Si vous souhaitez apparaître dans ces classements, vous devez régler l’option de profil Affichage public sur Visible.

tableau de bord Common Voice

Objectifs

La page des objectifs se compose de 2 parties :

Une gamme d’objectifs vous y est proposé pour vous aider à nous aider à élargir les contributions sur une période donnée (1 à 15 jours) et le nombre d’échantillons parlés ou écoutés (5 à 150 phrases).

La deuxième partie de l’écran propose de définir un objectif personnalisé.

Il faudra remplir un questionnaire de 3 questions :

  • l’objectif quotidien ou hebdomadaire
  • le nombre d’échantillons – facile (15), normal (30), difficile (45), professionnel (60)
  • Parler, écouter ou faire les deux ?

Ainsi, vous verrez votre avancée par rapport à votre objectif.

Trophées

Avec les objectifs définis ci-dessus, vous obtiendrez un trophée à chaque fois que vous en aurez atteint un. Il sera différent suivant vos critères.

tableau de bord Common Voice

Un outil de rapport

Si vous contribuez quotidiennement, vous avez peut-être remarqué quelques erreurs dans les phrases à lire. Vous pouvez nous le faire savoir en utilisant le bouton Signaler.

Vous pouvez nous avertir des erreurs de grammaire, des mots d’une autre langue et d’autres inexactitudes.

Obtenir de la qualité

Lorsque vous validez des échantillons vocaux, vous allez repérer des erreurs dans les échantillons que vous écoutez.

Nous compilons le Top 5 des erreurs courantes :

  • mots ajoutés
  • mots oubliés
  • mots qu’on accroche
  • lettres oubliées qui modifient le sens de la phrase
  • inversion de syllabe

Objectif ecouter Common Voice Objectif parler Common Voice objectifs Common Voice

Le matériel

Le matériel n’est pas le critère principal, même s’il est important.

Tout d’abord, le réglage audio est très important, car si le volume du micro est mal réglé, le résultat sera refusé. Voici le Top 3 des erreurs dans ce domaine :

  • mauvaise compréhension de l’échantillon
  • bruit de souffle
  • volume faible qui rend l’échantillon incompréhensible

D’autres part, le déclenchement de l’échantillon grâce à la souris ou au clavier peut jouer sur la recevabilité du résultat qui pourra. Voici le Top 3 des erreurs de déclenchement :

  • le ou les premiers mots ne sont pas enregistrés
  • l’enregistrement de l’échantillon est stoppé avant la fin
  • le ou les derniers mots sont coupés avant la fin de l’enregistrement

La voix : un enjeu

Votre état de fatigue joue sur la qualité de l’enregistrement vocale.

Ainsi vous pouvez obtenir le message suivant : Enregistrement est trop long ou Enregistrement est trop court.

Il n’y a pas de problème, il suffit de recommencer l’échantillon pour qu’il soit validé.

Cependant, après une certaine quantité de contributions, d’autres erreurs apparaissent du style :

Accrochage d’un ou plusieurs mots, voir tous les mots.

C’est pourquoi il est alors préférable de faire une pause.

Beaucoup de vos questions devraient trouver une réponse dans notre FAQ.

objectifs Common Voice

Même si vous avez déjà participé en donnant votre voix, vous pouvez le (re)faire aujourd’hui et les jours qui suivent car nous ajoutons régulièrement de nouvelles phrases.


Venez découvrir tous les jours, les nouvelles phrases que nous vous proposons aussi bien à parler qu’à écouter.


@hellosct1

Précédent article à propos d’un projet de Mozilla : AV1, la solution ouverte, performante et libre de droits pour la vidéo en ligne

Regarder une vidéo coûteAV1 est un codec vidéo de nouvelle génération qui surpasse les performances de VP9 et HEVC, ses concurrents. Le format AV1 est et restera toujours libre de droits grâce à sa licence de logiciel libre permissive…

Réussir sa rentrée avec Firefox

Dessin sur tableau noir d’une fille et d’au garçon tenant devant eux un gros crayon ayant écrit 1 + 1 = 2 et un cœur à droite et « ABC » à la craie blanche en dessous (stux, back to school, Pixabay)Élèves, parents, étudiants, professeurs, vous voici à l’aube d’une nouvelle année scolaire ou universitaire (ou les deux). Nous avons réalisé une sélection d’extensions et de fonctions de Firefox pour partir du bon pied et réussir sa rentrée.

Je thème la rentrée !

Avant de se mettre au boulot, mettons un peu de fun sur votre bureau. Vous pouvez habiller votre Firefox avec des milliers de thèmes disponibles gratuitement sur AMO. Pour ce début septembre, vous pouvez adopter un thème d’automne

autumn path par candelora Thème « autumn path » par candelora

… ou être plus aventureuse ou aventureux et choisir un thème sur la rentrée des classes.

Thème pour Firefox « Back to School » par weedbead1-1364610559.72 Thème « Back to School » par weedbead1-1364610559.72

Thème pour Firefox « Back to School » par VanillaOrchids Thème « Back to School » par VanillaOrchids

Thème pour Firefox « BackToSchool » par BleedBNG Thème « BackToSchool » par BleedBNG

Thème pour Firefox « Back 2 School » par MaDonna Thème « Back 2 School » par MaDonna

Gagnez en productivité avec Firefox

Un compte Firefox central

Facilitez-vous la vie avec un compte Firefox. Se créer un compte Firefox est rapide et gratuit. Il vous permet ensuite de vous connecter aux services et extensions que Mozilla met à votre disposition. Cliquez sur le bouton du compte Firefox dans votre barre d’outils de Firefox pour voir si vous en disposez déjà. Selon le cas, connectez-vous ou créez un compte Firefox.

Firefox 68 : panneau du bouton de compte Firefox

Grâce à votre compte Firefox, vous pourrez tirer le meilleur des extensions et services que Mozilla propose pour Firefox.

Avec votre compte Firefox, vous pouvez synchroniser vos données personnelles – mots de passe, marque-pages, historique de navigation, onglets ouverts, modules complémentaires et options – entre vos Firefox :

Le nouveau gestionnaire de mots de passe de Mozilla

Avec Firefox Lockwise, disposez dès maintenant du prochain gestionnaire de mots de passe de Firefox (en octobre). Vous pouvez l’installer dans Firefox pour ordinateur et vous procurez aussi les applications pour iOS (iPhone et iPad) et pour Android.

Firefox Lockwise : Emportez vos mots de passe partout avec vous (1 min)

Voir Commencer avec Firefox Lockwise sur le site d’assistance de Mozilla, SUMO, traduit par la communauté.

Gardez-vous des fuites de données avec Firefox Monitor

Grâce à Firefox Monitor, vous pouvez en toute sécurité vérifier si vos adresses de courriel figurent dans une fuite de données connue, et prendre les mesures pour protéger vos données.

Firefox monitor : Vérifiez si vous êtes concernée par une fuite de données

Depuis début juin, grâce à votre compte Firefox, vous disposez d’un tableau de bord vous permettant de gérer plusieurs adresses électroniques.

Firefox Monitor vous avertit également si une de vos adresses répertoriées est prise dans une nouvelle fuite de données.

Vous pouvez aussi recevoir des alertes dans Firefox pour ordinateur. Si vous consultez un site pris dans une fuite de données, vous recevez une alerte dans le navigateur (une seule fois par site) vous prévenant que ce site a subi une fuite de données.

Alerte de Firefox Monitor dans Firefox pour ordinateur

Voir sur SUMO :

Firefox Send : le transfert de fichiers volumineux selon Mozilla

Comme nous vous le décrivions en longueur en mars dernier, le service de Mozilla, Firefox Send, permet d’envoyer très simplement et de façon sûre de gros fichiers ou des projets faits de plusieurs fichiers. Avec un compte Firefox, vous portez la taille des fichiers partageables à 2,5 Go et vous disposez de davantage de paramètres sur vos partages. Ainsi, vous pouvez définir le nombre des téléchargements possibles jusqu’à 100 et le délai de disponibilité du fichier jusqu’à une semaine avant autodestruction de votre fichier.

Firefox Send : déplacement de fichiers


Voyez cette vidéo de moins d’une minute vous présentant le service en français :

Organisez votre plan de travail avec Mozilla

Au début de l’été, le nouveau blog francophone de Firefox, Firefox et au-delà, vous a présenté 9 modules pour gagner en productivité avec Firefox. Parmi ceux-ci figurent des fonctionnalités pour Firefox créées par Mozilla.

Ainsi, grâce à votre compte Firefox, vous pouvez partager vos notes entre vos Firefox pour ordinateur avec l’extension Notes de Mozilla et l’application pour Android.

Test Pilot Notes : synchronisation entre mobile et desktop

Side View, que nous vous présentions lorsqu’il était une expérience, est une extension autonome de Mozilla qui vous permet d’afficher une page dans le panneau latéral de Firefox. Vous pouvez ainsi garder à l’œil un site comme Twitter ou une vidéo pendant que vous surfez, ou encore comparer deux documents (très pratique pour les traductions). Je dois vous avouer que je rédige ce billet dans le panneau latéral pendant que je navigue dans les onglets de Firefox à la recherche des infos qu’il me faut.

Side View avec YouTube

Firefox Screenshots est une fonctionnalité de Firefox qui vous permet de prendre des captures d’écran des pages web ou de parties de page facilement. Vous pouvez même prendre une capture de toute la page, y compris les parties non visibles à l’écran. Apprenez-en plus sur SUMO.

Menu des actions sur la page de Firefox avec l'item « Effectuer une capture d'écran » sélectionné

Pocket est un service racheté par Mozilla auquel vous pouvez vous inscrire gratuitement, dans Firefox ou pas, avec un compte Firefox ou pas, et auquel vous pouvez accéder avec Firefox ou pas. Il vous permet de sauvegarder dans votre navigateur, sur mobile ou dans de nombreuses applications des articles pour les lire aisément plus tard ou même en vous les faisant lire par synthèse vocale sur mobile.

Illustration Pocket


Retrouvez les 5 autres extensions de Firefox conseillées pour gagner en productivité. Elles vous faciliteront l’accès aux sources et documents dont vous aurez besoin au cours de votre année scolaire ou universitaire. Vous pourrez aussi gagner en productivité en écartant les distractions, la fatigue oculaire ou en accélérant vos recherches.

Corrigez grammaire et typographie

Enfin, je rajouterais à cette liste l’extension Grammalecte que nous vous avions présentée en décembre pour la dernière fois. Elle vous permet de chasser vos erreurs d’orthographe, de grammaire et en matière de typographie. C’est l’extension indispensable à tout écrit, même ceux du quotidien.

Grammalecte : correcteur grammatical

Grammalecte vous avez été présenté, comme nombre d’autres extensions très pratiques, dans le cadre de notre calendrier de l’Avent Extensions.


Ceci n’est qu’un petit échantillon des fonctionnalités et extensions de Firefox qui peuvent améliorer votre productivité et vous permettre de passer une bonne année. Parcourez SUMO et AMO et partagez vos découvertes avec la communauté.


Mozinet

Précédent article sur une extension : Décharger les onglets automatiquement

L’extension recommandée Auto Tab Discard vous permet de personnaliser le type d’onglets qui se déchargeront automatiquement après le délai d’inactivité que vous choisissez. Votre Firefox a tendance à être trop gourmand en ressources ou en énergie ?…

Crédit illustrations : image d’illustration de l’article, stux sous licence permissive Pixabay

images d’illustration de Notes et de Pocket, Mozilla

Les types d'interfaçage WebAssembly : une interopérabilité pour les unir tous

Cet article est une traduction de WebAssembly Interface Types: Interoperate with All the Things!, écrit par Lin Clark. Merci à elle pour le travail de rédaction originale !

WebAssembly fait parler de lui, y compris en dehors du navigateur. Cet engouement n’est pas seulement lié à un environnement d’exécution WebAssembly isolé mais aussi parce qu’on peut exécuter du code WebAssembly depuis des langages comme Python, Ruby ou Rust.

Pour quoi faire ? Voici quelques raisons :

  • Rendre les modules « natifs » moins compliqués
    Les environnements d’exécution tels que Node ou CPython pour Python permettent également d’écrire des modules dans des langages bas niveau tels que C++. Une telle approche permet de profiter de la vitesse de ces langages bas niveaux. On peut ainsi utiliser des modules natifs en Node ou des modules d’extension en Python. Toutefois ces modules sont souvent difficiles à utiliser car ils doivent être compilés sur l’appareil de l’utilisateur. Avec un module « natif » WebAssembly, on obtient une bonne partie de cette vitesse sans compliquer la mise en œuvre.
  • Isoler plus facilement le code natif dans des bacs à sable
    D’un autre côté, pour des langages bas niveau tels que Rust, pas besoin d’utiliser WebAssembly pour gagner de la vitesse. En revanche, cela peut servir pour la sécurité. Comme nous en parlions lors de l’annonce de WASI, WebAssembly fournit un bac à sable léger par défaut et un langage comme Rust pourrait utiliser WebAssembly afin de placer ses modules natifs dans un bac à sable.
  • Partager du code natif à travers différentes plateformes
    Les développeurs peuvent s’épargner du temps et des coûts de maintenance s’ils peuvent réutiliser la même base de code sur différentes plateformes (entre une application web et une application pour le bureau par exemple). Cela concerne aussi bien les langages de script que les langages bas niveaux. De plus, WebAssembly apporte une solution sans ralentir quoi que ce soit sur les plateformes en question.

4 personnages représentant Python, Ruby, Rust et C++ disent : Nous aimons la vitesse de WebAssembly, la sécurité qu'il pourrait nous apporter et nous souhaitons tous que les développeurs puissent travailler efficacement

WebAssembly pourrait donc aider d’autres langages à résoudre des problèmes majeurs.

Malgré cela, convertir une valeur d’un type vers l’autre est possible en suivant certaines règles cette façon. WebAssembly peut être exécuté dans ces environnements mais ce n’est pas suffisant.

Aujourd’hui, WebAssembly ne dialogue avec l’extérieur qu’avec des nombres et ses fonctions peuvent être appelées depuis un autre langage et vice versa.

Mais si une fonction prend des arguments ou renvoie une valeur qui ne sont pas des nombres, ça devient vite compliqué. On peut alors :

  • Mettre à disposition un module dont l’API est ultra-compliqué et ne manipule que des nombres : tant pis pour l’utilisateur du module…
  • Ajouter du code intermédiaire (de la « glue ») pour chaque environnement dans lequel on souhaite que ce module puisse être exécuté : tant pis pour le développeur du module.

Faut-il s’en satisfaire ?

On devrait pouvoir fournir un seul module WebAssembly qui puisse être exécuté n’importe où… sans pour autant compliquer la vie de l’utilisateur du module ou de son développeur.

D'un côté un utilisateur de module qui se demande : Qu'est-ce que c'est encore que cette API ? et d'un autre côté, un développeur qui dit Pff, encore tout un tas de glue à créer pour que ça fonctionne. En dessous, les deux disent simplement : Attendez, ça fonctionne ??

Le même module WebAssembly pourrait utiliser des API riches et des types complexes afin de dialoguer avec :

  • Des modules s’exécutant dans leur environnement natif (ex. des modules Python s’exéutant dans un environnement Python)
  • D’autres modules WebAssembly écrits depuis d’autres langages sources (ex. un module Rust et un module Go s’exécutant de concert dans le navigateur)
  • Le système sous-jacent (ex. un module WASI fournissant une interface système avec le système d’exploitation ou avec les API du navigateur).

Un diagramme avec un fichier .wasm qui dialogue avec : des modules qui s'exécutent dans leurs environnements (ex. PHP, Ruby, Python) ; des modules écrits depuis d'autres langages sources (ex. Rust, Go) ; des systèmes hôtes qui fonctionnent directement avec le système d'exploitation. En haut : le slogan : Les types d'interfaçage WebAssembly : l'interopérabilité pour tous.

Avec une nouvelle proposition, nous pouvons voir comment cela peut fonctionner (et ça fonctionne :)). Voici par exemple une démo :

Voyons comment cela fonctionne. Mais avant regardons la situation actuelle et les problèmes que nous essayons de résoudre.

Discussion entre WebAssembly et JavaScript

WebAssembly ne se limite pas au Web mais jusqu’à présent, une grande partie du développement de WebAssembly concernait le Web.

En effet, on conçoit mieux lorsqu’on se concentre sur la résolution de problèmes concrets. Ce langage devait être exécuté sur le Web et c’était donc un point de départ pertinent.

On a ainsi obtenu un produit minimum viable (MVP) avec un périmètre bien défini. WebAssembly devait alors seulement être capable de dialoguer avec un autre langage : JavaScript.

Ce fut relativement facile à obtenir. Au sein du navigateur, WebAssembly et JS s’exécutent dans le même moteur et le moteur peut donc les aider à discuter efficacement. À droite, un bonhomme-fichier JS qui demande à un intermédiaire : Peux-tu demander au wasm de générer les pixels d'une image pour moi ?. L'intermédiaire répond : Sans problème. À gauche le bonhomme-fichier WASM attend.

L'intermédiaire au centre demande au fichier-bonhomme WASM : j'aimerais que tu exécutes imageGenerate.

Malgré tout, il y a un problème lorsque ces deux-là essaient de dialoguer : ils utilisent des types différents.

Actuellement, WebAssembly ne s’exprime qu’avec des nombres. JavaScript sait ce qu’est un nombre mais possède également quelques autres types.

Et même les nombres ne sont pas vraimeent les mêmes. WebAssembly possède quatre types de nombres : int32, int64, float32, float64. JavaScript possède quant à lui un seul type Number (BigInt sera bientôt un nouveau type numérique en JS).

La différence entre ces types ne s’arrête pas aux noms. Les valeurs sont aussi stockées différemment en mémoire.

Pour commencer, n’importe quelle valeur JavaScript (quel que soit son type) est placée dans une boîte (voir ce précédent article où j’expliquais le concept).

En revanche, WebAssembly utilise des types statiques pour les nombres et il n’utilise ni ne comprend les boîtes de JavaScript.

Cette différence rend le dialogue un peu compliqué. L'intermédiaire au milieu demande au fichier WASM : 'le fichier JS voudrait que tu ajoutes 5 et 7'. Le module WASM répond : 'Aucun problème, ça fait 9.2368828e
+18'. L'intermédiaire rétorque : 'Pardon ?!' Malgré cela, convertir une valeur d’un type vers l’autre est possible en suivant quelques règles simples.

Les règles simples sont facilement écrites et on peut les retrouver dans la spécification de l’API entre WebAssembly et JavaScript. Un livre ouvert où la page de gauche contient 'WASM vers JS' et où la page de droite contient 'int32 -> Number', 'int64 -> BigInt', 'float32 -> Number' et 'float64 -> Number'

Cette correspondance est inscrite dans les moteurs d’exécution.

C’est un peu comme si le moteur possédait un manuel. Lorsque le moteur doit passer des paramètres ou des valeurs de retour entre JavaScript et WebAssembly, il sort le manuel et le consulte afin de savoir comment convertir ces valeurs.

02-05-number-conversion.png, sept. 2019

Avoir aussi peu de types à gérer (uniquement des nombres) rend la chose facile. Ce fut une bonne chose pour un MVP et ça a réduit le nombre de questions difficiles à trancher.

En contrepartie, ce fut plus compliqué pour les développeurs d’utiliser WebAssembly. Pour passer des chaînes de caractères entre JavaScript et WebAssembly, il a fallu trouver une méthode pour transformer des chaînes de caractères en tableaux de nombres puis de faire l’opération inverse. Nous avions couvert sur ce sujet dans un précédent billet.

Un diagramme montrant comment la chaîne de caractères 'Hello' JavaScript est convertie en nombres puis placée dans un objet mémoire pour WebAssembly

Ce n’est pas difficile mais c’est laborieux. Des outils ont naturellement été construits afin de rendre cette conversion transparente.

Entre autres, on pourra trouver des outils tels que wasm-bindgen (en Rust) et Embind d’Emscripten qui enveloppent automatiquement le module WebAssembly avec du code JavaScript de liaison qui s’occupe de la traduction des chaînes de caractères en nombres.

Un nouveau fichier fait son apparition entre le fichier WASM et le fichier JS. Le fichier JS tout à droite dit 'Zut, je vais encore devoir passer une chaîne de caractères au WASM...'. Là le fichier JS pour le code de liaison intervient et dit 'Je peux aider, je vais placer la chaîne en mémoire et indiquer au module WASM son emplacement' Ces outils ont également permis d’effectuer des transformations pour des types de plus haut niveau comme des objets complexes avec des propriétés.

Cela fonctionne mais pour certains cas triviaux, ce n’est pas suffisant.

Imaginons qu’on veuille passer une chaîne de caractères entre deux scripts JS via un module WebAssembly. On doit avoir une fonction JavaScript qui passe une chaîne à une fonction WebAssembly puis le module WebAssembly doit passer cette chaîne à une autre fonction JavaScript.

Pour que tout cela fonctionne, il faut :

  1. Que la première fonction JavaScript passe la chaîne de caractères au code JS qui s’occupe de la liaison (“glue code”)
  2. Que le code de liaison transforme cette chaîne de caractères en nombre et passe ces nombres en mémoire linéaire
  3. Qu’il envoie un nombre (le pointeur vers le début de la zone mémoire) au module WebAssembly
  4. Que la fonction WebAssembly passe ce nombre au code de liaison JS de l’autre côté
  5. Que le code de liaison JavaScript retire ces nombres de la mémoire linéaire pour les décoder en chaîne de caractères
  6. Que le deuxième script de liaison fournisse cette chaîne à la deuxième fonction JS.

Première étape : le fichier JS tout à gauche passe la chaîne 'Hello' au fichier JS de liaison à sa droite.

Deuxième étape, ce fichier avec le code de liaison fait le nécessaire pour convertir la chaîne en nombres en mémoire.

Troisième étape, le fichier avec le code liaison indique à l'intermédiaire : 'Veuillez envoyer l'index 2 au WASM'. L'intermédiaire réfléchit alors 'OK pour passer d'une valeur JSValue à un int32, je dois...'

Quatrième étape, le fichier WASM demande à l'intermédiaire : 'Peux-tu passer l'index 2 ?' pour le script JS à sa droite. L'intermédiaire réfléchit 'Alors pour passer d'un int32 à un Number, je dois...'

Cinquième étape, le deuxième fichier de glue JS (situé à droite du WASM) calcule pour convertir le tableau mémoire en chaîne de caractères. Il produit la valeur 'Hello'.

Sixième étape, le fichier de glue JS passe la valeur 'Hello' au script JS situé à sa droite

On a donc un code de liaison JS qui effectue “simplement” l’opération inverse de celle effectuée plus tôt pour la conversion. Cela fait beaucoup de travail pour en arriver là.

Si la chaîne de caractères pouvait directement être passée au module WebAssembly sans toutes ces transformations, ce serait bien plus simple.

WebAssembly ne pourrait pas manipuler cette valeur, il ne connaît pas ce type : on ne résout pas ce problème de compréhension.

Mais si on pouvait simplement passer la valeur au module WebAssembly comme un passe-plat, cela suffirait aux deux fonctions JavaScript, car elles savent quoi faire avec une valeur d’un tel type.

Il s’agit ici d’une raison de la proposition pour les types de référence WebAssembly. Cette proposition ajoute un nouveau type de base à WebAssembly intitulé anyref.

Avec une valeur anyref, un script JS fournirait au WebAssembly une référence objet (en fait un pointeur qui ne révèle pas l’adresse mémoire). Cette référence pointera vers l’objet sur le tas JS. Le module WebAssembly pourrait alors passer cette valeur à d’autres fonctions JS qui sauraient l’utiliser.

Première étape. Le fichier JS tout à gauche tend la valeur 'Hello' demande à l'intermédiaire 'Peux-tu passer cette chaîne de caractères au WASM ?'. L'intermédiaire réfléchit 'Hmm on dirait qu'il suffit de founir un pointeur au WASM, facile'

Deuxième étape. Le module WASM au centre, tendant la valeur 'Hello', demande à l'intermédiaire 'Peux-tu passer ça au module JavaScript ? Je ne sais pas ce que c'est mais le JS devrait comprendre'. L'intermédiaire réfléchit 'C'est déjà un pointeur vers un objet d'un tas de mémoire JS, plutôt simple'

Cela résout un problème d’interopérabilité avec JavaScript, mais il en existe d’autres dans le navigateur.

Un navigateur possède un ensemble beaucoup plus large de types et WebAssembly doit être capable d’inter-opérer avec ces types si on veut que les performances soient décentes.

Discussion directe entre WebAssembly et le navigateur

JavaScript ne représente qu’une partie du navigateur. Ce dernier possède de nombreuses autres fonctions qu’on peut utiliser : les API Web.

Sous le capot, les fonctions de ces API Web sont généralement écrites en C++ ou en Rust. Ces deux langages stockent chacun à leur façon les objets en mémoires.

Les paramètres et valeurs de retour de ces API Web sont décrites par de nombreux types. Il sera fastidieux de décrire des conversions pour chacun de ces types. Pour simplifier les choses, il existe un standard pour la structure de ces types : Web IDL.

Lorsque vous utilisez ces fonctions, c’est généralement depuis du code JavaScript. Cela signifie que vous passez des valeurs exprimées sur des types JavaScript. Comment un type JavaScript se retrouve converti en type Web IDL ?

À l’instar des correspondances établies entre les types WebAssembly et les types JavaScript, il existe des correspondances entre les types JavaScript et Web IDL.

Là encore, on peut voir cela comme un autre manuel qui explique comment passer de Web IDL à JavaScript. Là aussi ces correspondances font partie intégrant du moteur du navigateur.

Un livre ouvert où la page de gauche contient 'JS vers Web IDL' et où la page de droite contient 'String -> DOMString', 'String -> ByteString', 'String -> USVString', 'Object -> object'

Pour la plupart des types, la correspondance entre JavaScript et Web IDL est assez simple. Ainsi, un type tel que DOMString est compatible avec le type JS String car les deux ont une correspondance directe.

Que se passe-t-il lorsqu’on essaie d’appeler une API Web depuis du code WebAssembly ? Il y a un problème.

À l’heure actuelle, il n’existe pas de correspondance entre les types WebAssembly et les types Web IDL. Cela signifie que même pour les types simples comme les nombres, l’appel doit passer par JavaScript.

Voici ce qui se produit :

  1. WebAssembly passe la valeur au JavaScript
  2. Pour ce faire, le moteur convertit la valeur en un type JavaScript et la place sur le tas de la mémoire JavaScript
  3. La valeur JavaScript est ensuite passée à la fonction de la Web API. Ici, le moteur convertit la valeur JS en un type Web IDL et la place sur une autre zone mémoire, le tas du renderer.

Première étape, le module WASM à gauche tend la valeur 38.

Deuxième étape, l'intermédiaire réfléchit 'Pour commencer, on passe du type int32 au type Number et on place la valeur sur le tas de la mémoire pour JS'. La valeur 38 est ajoutée au tas de la mémoire.

Troisième étape, l'intermédiaire réfléchit 'et ensuite on convertit ça en double... et je peux enfin exécuter la fonction'. La valeur 38 est ajoutée au tas du renderer avec le type double.

Ce n’est pas optimal : plus de tâches à effectuer et plus de mémoire consommée.

Une solution a priori évidente consisterait à créer des correspondances entre WebAssembly et Web IDL. Toutefois, ce n’est pas aussi trivial qu’il y paraît.

Pour les types Web IDL simples tels que booleanet unsigned long (un nombre), il existe des correspondances évidentes entre WebAssembly et Web IDL.

Mais une bonne partie des paramètres utilisées par les API Web ont des types complexes. Une API peut, par exemple, prendre un dictionnaire (comme un objet avec des propriétés) ou une série (un tableau) en entrée.

Pour créer une correspondance directe entre les types WebAssembly et les types Web IDL, il faudrait ajouter des types de plus haut niveau. C’est ce que nous faisons avec la proposition d’ajout d’un ramasse-miettes à WebAssembly. Grâce à ceci, les modules WebAssembly pourront créer des objets pour le ramasse-miettes tels que des structures et des tableaux qui pourront servir aux correspondances pour les types Web IDL.

Mais si la seule façon d’interagir avec les API Web consiste à utiliser les objets du ramasse-miettes, cela complique la tâche pour les langages tels que Rust et C++ qui n’utilisent pas les objets du ramasse-miettes en temps normal. À chaque interaction avec une API Web, il faudrait créer un objet du ramasse-miettes et copier les valeurs depuis la mémoire linéaire dans l’objet.

Le résultat ainsi obtenu est légèrement mieux que la situation actuelle avec le code de liaison JavaScript.

On ne souhaite pas avoir de code de liaison JavaScript pour construire les objets du ramasse-miettes : c’est un gaspillage de temps et de ressources. Réciproquement, on ne veut pas que le module WebAssembly construise ces objets pour les mêmes raisons.

On souhaite qu’appeler les API Web soit aussi simple pour les langages qui utilisent une mémoire linéaire (tels que Rust ou C++) que pour les langages qui utilisent un ramasse-miettes intégré. Il faut donc également une méthode pour créer une correspondance entre les objets en mémoire linéaire et les types Web IDL.

Mais il y a un hic. Chaque langage représente des choses en mémoire linéaire de façon différente. On ne peut pas choisir une de ces représentations spécifiquement, tous les autres langages en pâtiraient.

Un bonhomme au centre, entourés de langages comme C++, Kotlin, Go, D, Rust, Haskell et qui s'exclame : 'Je choisis... celui-là' en pointant Rust. Une annotation rouge indique avec une flèche 'Mauvaise idée'

Bien que l’organisation mémoire soit différente, il y a certains concepts abstraits qui sont généralement partagés.

Ainsi, pour les chaînes de caractères, un langage possède souvent un pointeur vers le début de la chaîne de caractères et sa longueur. Si la chaîne de caractères possède une représentation plus complexe, il est généralement utile de convertir les chaînes vers ce format pour appeler des API externes.

De cette façon, on peut réduire la chaîne en un type que WebAssembly comprend : deux valeurs i32.

La chaîne de caractères 'Hello' encodée en mémoire et deux valeurs 'offset=2' et 'length=5' avec deux flèches vers elles et l'indication 'des types que WebAssembly comprend'

Là encore, un petit hic. WebAssembly est un langage fortement typé. Pour des raions de sécurité, le moteur vérifie que le code appelant passe des valeurs dont les types correspondent à ceux attendus par l’appelé.

Cela empêche les attaquants d’exploiter des incohérences de type pour détourner le moteur.

Si vous appelez une fonction qui utilise une chaîne de caractère et que vous tentez de lui passer un entier, le moteur vous criera dessus. Et ça tombe bien, c’est ce qu’il devrait faire.

Le module WASM tend un entier (57) et dit au moteur 'tiens, voilà un entier, utilise le avec une fonction qui prend une chaîne en entrée'. Le moteur rétorque : 'tu essaies quoi au juste ? de permettre aux attaquants de me pirater moi ?!'

Il nous faut donc une façon pour un module de dire au moteur quelque chose comme “Je sais que Document.createElement() prend une chaîne de caractères, mais je vais l’appeler et vous envoyer deux entiers. Prenez ces deux entiers pour créer un objet DOMString à partir des données en mémoire linéaire. Le premier entier sera l’adresse de départ de la chaîne de caractères et le second correspondra à sa longueur.”

C’est tout l’objectif de la proposition pour les types d’interfaçage Web IDL. On fournit à un module WebAssembly une façon d’indiquer une correspondance entre les types qu’il utilise et les types Web IDL.

Ces correspondances ne sont pas enregistrées en dur dans le moteur. C’est le module qui fournit un petit livret expliquant les correspondances qu’il utilise.

Le module WASM s'incline pour tendre un livret au moteur et lui dit 'Voici quelques notes qui t'indiqueront comment traduire mes types en types d'interfaçage et vice versa'.

Le moteur a donc une méthode pour dire “pour cette fonction, la vérification des types pour les chaînes de caractères consistera à vérifier deux entiers”.

Le couplage entre le module et ce livret d’explication est aussi utile pour une autre raison.

Parfois, un module qui stocke normalement ses chaînes en mémoire linéaire pourra vouloir utilise une anyref ou un type du ramasse-miettes pour un cas spécifique. C’est le cas notamment pour un module qui passe un objet qu’il a obtenu d’une fonction JavaScript (un nœud du DOM par exemple) vers une API Web.

Ainsi, un module doit pouvoir choisir au cas par cas entre les fonctions (voire entre les arguments) la façon dont la correspondance de type est gérée. La correspondance étant fournie par le module, ce dernier peut décrire une correspondance sur-mesure.

Le module WASM indique au moteur : 'Attention à bien lire. Pour certaines fonctions qui utilisent des DOMString, je te fournirai deux nombres mais pour les autres je t'enverrai simplement la valeur DOMString que m'a fourni le JavaScript.

Comment faire pour générer ce livret ?

Le compilateur prend en charge cette opération. Il ajoute une section spécifique au module WebAssembly. Pour la plupart des chaînes de compilation des différents langages, le développeur n’aura pas un grand travail supplémentaire.

Prenons un exemple avec la chaîne de compilation Rust et comment celle-ci gère le passage d’une chaîne de caractères à la fonction alert.

#[wasm_bindgen]
extern "C" {
  fn alert(s: &str);
}

Le développeur doit juste indiquer au compilateur d’ajouter cette fonction au livret avec l’annotation #[wasm_bindgen]. Par défaut, le compilateur considèrera qu’il s’agit d’une chaîne de caractères représentée en mémoire linéaire et ajoutera la bonne correspondance. Si on avait souhaité la gérer différemment (comme un anyref par exemple), on aurait écrit une autre annotation à destination du compilateur.

Grâce à ça, on peut enlever le code JavaScript intermédiaire pour la liaison. Le passage de valeur entre WebAssembly et les API Web est plus rapide. De plus, cela fait moins de JavaScript à distribuer.

Au passage, aucun compromis n’a été effectué quant aux langages pris en charges. On peut utiliser n’importe quel langage qui compile vers WebAssembly. Tous ces langages peuvent définir leur correspondance vers les types Web IDL, peu importe qu’ils utilisent une mémoire linéaire, des objets de ramasse-miettes ou les deux.

En prenant un peu de recul sur cette solution, on peut voir qu’elle résout un bien plus grand problème.

WebAssembly : un langage pour tous leur parler

Revenons à la promesse que nous évoquions au début de ce billet.

Existe-t-il une méthode réaliste afin que WebAssembly puisse parler à ces différents systèmes quels que soient les types qu’ils utilisent ?

Un diagramme avec un module WASM à droite et trois doubles flèches qui partent vers : des modules PHP/Python/Ruby qui s'exécutent dans leurs environnements ; des modules Rust/Go qui sont écrits avec un autre langage ; des systèmes hôtes qui fonctionnent directement avec le système d'exploitation

Quelles sont les options ?

On pourrait essayer de créer des correspondances inscrites en dur dans le moteur (à la façon de ce qui est fait entre WebAssembly et JavaScript d’une part et entre JavaScript et WebIDL d’autre part).

Mais pour ce faire, il faudrait une correspondance spécifique par langage. Le moteur aurait à prendre en charge chacune de ces correspondances explicitement et les mettre à jour à chaque changement de chaque langage. Bref, c’est la pagaille.

C’est de cette façon que furent conçus les premiers compilateurs. Il existait une trajectoire différente entre chaque langage source et chaque langage machine. Nous en parlions plus en détails dans un des premiers billets sur WebAssembly.

Un diagramme avec différents langages sources sur la gauche vers différentes plateformes matérielles (x86 / ARM) représentées par une créature protéiforme

On ne veut pas avoir quelque chose d’aussi compliqué. On veut que chaque langage puisse parler à chaque plateforme. Et en même temps, on veut que cette approche soit extensible.

Il nous faut donc une autre approche et on peut s’inspirer des architectures des compilateurs modernes. Pour ceux-ci, il y a une division entre le front-end et le back-end. La partie front-end porte sur le langage source traduit en une représentation intermédiaire abstraite. La partie back-end part de cette représentation intermédiaire jusqu’au code machine cible.

Contrairement au diagramme précédent, les flèches convergent vers une zone intermédiaire avec 'IR' de là repartent de nouvelles flèches vers les plateformes.

C’est de cette méthode dont s’inspirent les types Web IDL. Quand on le regarde d’un autre angle, Web IDL ressemble un peu à une représentation intermédiaire.

Ceci étant posé, Web IDL est assez spécifique au Web. Et il existe de nombreux cas d’usage pour WebAssembly en dehors du Web. Web IDL n’est donc pas la représentation intermédiaire qu’il faut.

Malgré cela, pouvons-nous nous inspirer de Web IDL et créer un nouvel ensemble de types abstraits ?

C’est ainsi qu’on arrive à la proposition pour les types d’interfaçage WebAssembly.

Un diagramme avec un module WASM à gauche, une liste de langages qui compilent vers WASM et des doubles flèches qui pointent vers le texte 'Types d'interfaçage WebAssembly'. De là repartent des doubles flèches vers des langages, des environnements, des systèmes d'exploitation, etc.

Ces types ne sont pas des types concrets. Ils ne ressemblent pas aux types qu’on trouve aujourd’hui dans WebAssembly comme int32 ou float64. On ne peut pas les manipuler avec des opérations en WebAssembly.

On n’ajoutera par exemple pas de méthode de concaténation de chaînes de caractères dans WebAssembly. Toutes les opérations seront effectuées sur les types concrets à chaque extrêmité.

La clef de voûte de ce fonctionnement est la copie des valeurs d’un côté à l’autre. Plutôt que de partager une représentation commune, les deux parties utilisent les types d’interfaçage pour copier les valeurs.

Le module WASM dit 'vu que c'est une chaîne de caractères en mémoire linéaire, je sais comment la manipuler' et le navigateur dit 'vu que c'est une DOMString, je sais comment la manipuler'. Sous le capôt, le moteur copie le tampon de mémoire linéaire WASM dans le tas du renderer.

Il existe un point qui pourrait constituer une exception à cette règle : les nouvelles valeurs de référence (telles que anyref) que nous avons mentionnées plus haut. Dans ce cas, c’est le pointeur vers l’objet qui est copié entre les deux côtés. Les deux pointeurs pointent donc vers la même chose. En théorie, cela peut vouloir dire qu’ils ont besoin de partager une représentation.

Dans les cas où la référence ne fait que “traverser” un module WebAssembly (comme l’exemple que nous avons vu avec anyref), les deux interlocuteurs n’ont pas à partager une représentation. Le module n’est pas supposé comprendre ce type mais simplement le passer entre les fonctions.

Il existe cependant des scénarios où on souhaite que les interlocuteurs partagent une représentation. Par exemple, la proposition pour le ramasse-miettes ajoute une méthode pour créer des défintions de type afin que les deux parties puissent partager des représentations. Dans ces cas, le choix de la représentation et de ce qu’il faut partager est effectué par les développeurs qui conçoivent l’API.

Cette approche rend le dialogue beaucoup plus simple entre un module WebAssembly et de nombreux langages.

Dans certains cas (comme celui du navigateur), la correspondance entre les types d’interfaçage et les types du système sous-jacent sera inscrite en dur.

Ainsi, une partie des correspondances est construite à la compilation tandis que l’autre est fourni au moteur lors du chargement du contenu.

Le moteur lit le livret et dit 'OK, donc ça ça correspond à une chaîne ? Je peux donc utiliser mes correspondances en dur afin de la convertir en DOMString pour la fonction qui le demande'

Dans les autres cas, par exemple quand deux modules WebAssembly échangent entre eux, les deux envoient leurs livrets d’instruction qui décrivent chacun leurs correspondances entre les types de fonction et les types abstraits.

Un module Rust compilé en WASM et un module Go compilé en WASM fournissent chacun un livret au moteur qui dit : 'OK, voyons voir comment assembler tout ça'.

Ce n’est pas la seule chose nécessaire pour que des modules écrits avec différents langages sources se parlent (nous reviendrons sur ce sujet) mais c’est un grand pas dans cette direction.

À quoi ressemblent ces types d’interfaçage ?

Avant d’aller plus loin dans les détails, rappelons que cette proposition est toujours en cours de développement. Le résultat final pourrait s’avérer complètement différent.

Deux bonhommes sont en train de placer des plots de chantier et l'un tient un panneau avec 'À utiliser avec précaution'.

De plus, tout est géré par le compilateur. Même après que cette proposition ait été finalisée, vous aurez uniquement à connaître les annotations attendues par la chaîne de compilation pour les mettre dans votre code (à la façon de ce que nous avons fait avec wasm-bindgen plus haut). Il n’est pas vraiment nécessaire de savoir comment ça fonctionne sous le capot.

Vu que les détails exposés par la proposition sont assez clairs, profitons-en pour voir comment tout cela s’articule.

Le problème à résoudre

Le problème consiste à traduire des valeurs entre différents types lorsqu’un module dialogue avec un autre module (ou avec un hôte comme le navigateur).

On a quatre endroits où on peut avoir besoin de traduire :

  • Pour les fonctions exportées
    • la réception de paramètres depuis l’appelant
    • l’envoi des valeurs de retour vers l’appelant
  • Pour les fonctions importées
    • le passage des paramètres à la fonction
    • la réception des valeurs de retour

On peut voir chacun de ces cas comme un mouvement sur deux directions :

  • La montée pour les valeurs qui quittent le module. Elles passent d’un type concret à un type d’interfaçage.
  • La descente pour les valeurs qui arrivent dans le module. Elles passent d’un type d’interfaçage à un type concret.

Un schéma avec deux modules WASM qui s'échangent des infos. Les valeurs envoyées remontent et les valeurs reçues redescendent le long des flèches

Indiquer au moteur les transformations à effectuer entre les types concrets et les types d’interfaçage

Il faut donc une méthode pour indiquer au moteur les transformations à appliquer aux paramètres et aux valeurs de retour d’une fonction. Comment faire ?

En définissant un adaptateur d’interface.

Prenons l’exemple d’un module Rust compilé en WebAssembly. Ce module exporte une fonction greeting_ qui peut être appelée sans paramètre et qui renvoie un message de salutation.

Voici ce qu’on aurait actuellement (avec le format textuel WebAssembly).

L'équivalent texte WebAssembly avec une annotation sur le retour : la fonction renvoie deux entiers.

Pour le moment, la fonction renvoie deux entiers.

Mais on voudrait qu’elle renvoie une valeur pour le type d’interfaçage string. On ajoute donc quelque chose qu’on appelle un adaptateur d’interface.

Si un moteur prend en charge les types d’interfaçage, lorsqu’il verra un adaptateur d’interface, il enveloppera le module dans cette interface.

Le code précédent est grisé et une partie avec l'interface est ajoutée. L'annotation indique que celle-ci renvoie une chaîne de caractères.

Le module n’exporte plus la fonction greeting_ mais la fonction greeting qui enveloppe l’originale. La nouvelle fonction greeting renvoie une chaîne de caractères et plus deux entiers.

On obtient une compabilité ascendante, car les moteurs qui ne comprennent pas les types d’interface exporteront la fonction originale greeting_ (celle qui renvoie deux entiers).

Comment l’adaptateur d’interface explique au moteur comment transformer deux entiers en une chaîne ?

Il utilise une séquence d’instructions d’adaptateur.

Le code précédent est grisé et deux nouvelles lignes sont ajoutée. La première indique l'appel de la fonction adaptée et la deuxième indique comment adapter la valeur de retour afin de produire une chaîne de caractères

Les instructions d’adaptateur présentées dans cette image sont deux exemples d’un ensemble d’instructions qui sont définies dans cette proposition.

Voici ce que font les instructions précédentes :

  1. Utiliser l’instruction d’adaptateur call-export afin d’appeler la méthode originale greeting_. C’est la fonction exportée par le module original qui renvoie deux nombres. Ces deux nombres sont placés sur la pile.
  2. Utiliser l’instruction d’adaptateur memory-to-string qui convertit les nombres en une séquence d’octets qui composent la chaînes de caractères. On doit ici préciser "mem" à la suite car un module WebAssembly pourrait demain avoir plusieurs espaces mémoire. On indique ainsi au moteur l’espace mémoire à consulter. Le moteur prend alors les deux nombres sur le dessus de la pile (qui correspondent au pointeur et à la longueur) et les utilise afin de déterminer les octets à utiliser.

Cela ressemble un peu à un langage de programmation, mais il n’y a pas de contrôle du flux d’instructions ici (pas de boucles ou d’instructions conditionnelles). Il s’agit d’un langage déclaratif qui nous permet de fournir des instructions au moteur.

À quoi cela ressemblerait-il si notre fonction prenait une chaîne en paramètre (le nom de la personne à saluer par exemple).

Eh bien c’est assez proche. On modifie l’interface de la fonction d’adaptation afin d’ajouter le paramètre et on ajoute ensuite deux instructions d’adaptateur.

Les lignes précédentes sont grisées. On voit l'ajout d'un premier fragment pour le paramètre qui est une chaîne de caractères. Ensuite une ligne ajoute une référence sur la pile pour référencer la chaîne passée en argument. Enfin, la troisième ligne indique comment interpréter les octets de la chaînes pour les placer en mémoire linéaire.

Voilà ce que font ces nouvelles instructions :

  1. Utiliser l’instruction arg.get afin d’obtenir une référence à l’objet qu’est la chaîne de caractères qu’on place sur la pile.
  2. Utiliser l’instruction string-to-memory afin de récupérer les octets de cet objet pour les placer en mémoire linéaire. Là encore, on précise l’espace mémoire dans lequel inscrire ces octets. On précise également comment allouer ces octets. Pour cela on fournit une fonction d’allocation (qui pourrait être un export fourni par le module).

Si vous souhaitez en savoir plus sur ce fonctionnement, vous pouvez consulter cette explication qui va plus en détails.

Envoyer les instructions au moteur

Comment envoyer tout cela au moteur ?

Ces annotations sont ajoutées au fichier binaire dans une section spécifique (custom).

Un fichier divisé en deux parties : la première (la plus grande) contient les sections « connues » avec le code et les données : la seconde, « spécifique », contient les adaptateurs d'interface.

Si un moteur sait exploiter les types d’interfaçage, il pourra utiliser cette section. Sinon, il pourra l’ignorer et vous pourrez utiliser une prothèse (polyfill) afin de lire la section et écrire du code de liaison.

Quelles différences avec CORBA, Protocol buffers, etc. ?

Il existe actuellement d’autres standards qui semblent résoudre ce même problème dont CORBA, Protocol buffers, Cap’n Proto.

En quoi ceux-ci sont différents ? Ils résolvent un problème beaucoup plus difficile.

Ils ont été conçus afin de pouvoir interagir avec un système avec lequel on ne partage pas de mémoire (soit parce qu’il s’agit d’un autre processus ou d’une toute autre machine sur le réseau).

Cela signifie qu’il faut pouvoir envoyer cette représentation intermédiaire par-delà cette frontière.

Ces standards visent à définir un format de sérialisation qui puisse efficacement voyager sur cette frontière. C’est là un des aspects essentiels de ces standards.

Deux machines qui se parlent avec chacune un module WASM. Entre ces deux machines une flèche annotée « IR » pour la représentation intermédiaire qui voyage sur cet axe.

Bien que le problème semble similaire, il s’agit en fait de l’exact inverse.

Avec les types d’interfaçage, la représentation intermédiaire (l’« IR ») ne quitte jamais le moteur. Elle n’est même pas visible pour les modules.

Les modules ne voient que ce le moteur leur fournit à la fin (ce qui a été copié sur leur mémoire linéaire ou fourni comme référence). Il n’est pas nécessaire d’indiquer au moteur l’organisation de ces types, car elle n’est pas définie.

Ce qui est défini, en revanche, est la façon de parler au moteur. Il s’agit du langage déclaratif utilisé pour écrire ce livret envoyé au moteur.

Les deux modules WASM ne sont plus reliés par une flèche, l'IR ne voyage plus le long d'un axe.

De cet aspect déclaratif découle un effet de bord appréciable : le moteur peut détecter lorsqu’une « traduction » entre types est superflue. Ainsi si les deux modules qui discutent utilisent le même type, le moteur évitera cette double transformation.

Le moteur, entouré d'un module Rust compilé en WASM et d'un module Go compilé en WASM, dit 'Ohoh, vous utilisez tous les deux une mémoire linéaire pour cette chaîne de caractères. Dans ce cas, je vais juste faire une rapide copie entre vos mémoires

Comment utiliser tout ça aujourd’hui ?

Comme nous l’avons indiqué plus haut, il s’agit d’une proposition au stade encore expérimental. Certaines choses risquent de changer rapidement et il serait risqué d’utiliser tout ça en production.

Ceci étant posé, si vous souhaitez manipuler tout ça, nous avons implémenté le nécessaire sur l’ensemble de la chaîne de compilation : de la production de code à la consommation :

  • La chaîne de compilation Rust
  • wasm-bindgen
  • L’environnement d’exécution WebAssembly Wasmtime

Comme nous maintenons ces outils et que nous travaillons sur le standard, nous pouvons maintenir le nécessaire pendant le développement du standard.

Bien que tout ça continue d’évoluer, nous nous assurons de synchroniser ces évolutions avec ces outils. Ainsi, tant que vous utilisez des versions à jour de ces outils, vous ne devriez pas rencontrer trop de problèmes.

Un bonhomme avec un casque et à proximité de plots de chantier qui dit « faites simplement attention à bien rester sur le chemin balisé ».

Voici donc les nombreuses façons dont vous pouvez utiliser tout ça aujourd’hui. Pour une version à jour, vous pouvez consulter ce dépôt de démonstrations.

Remerciements

  • Merci à l’équipe qui a assemblé toutes ces pièces pour tous ces langages et tous ces environnements d’exécution : Alex Crichton, Yury Delendik, Nick Fitzgerald, Dan Gohman et Till Schneidereit
  • Merci aux porteurs de cette proposition et à leurs collègues pour leur travail dessus : Luke Wagner, Francis McCabe, Jacob Gravelle, Alex Crichton et Nick Fitzgerald
  • Merci à mes merveilleux collègues : Luke Wagner et Till Schneidereit pour leurs retours et contributions inestimables à cet article.

À propos de Lin Clark

Lin travaille au sein de l’équipe ‘Advanced Development’ de Mozilla et notamment sur Rust et WebAssembly.

Décharger les onglets automatiquement

Auto Tab Discard : panneau de boutonL’extension recommandée Auto Tab Discard vous permet de personnaliser le type d’onglets qui se déchargeront automatiquement après le délai d’inactivité que vous choisissez.

Votre Firefox a tendance à être trop gourmand en ressources ou en énergie ? Après avoir essayé les solutions génériques conseillées par Mozilla pour la consommation de mémoire excessive et pour régler les paramètres de performances, vous pouvez vous intéresser à cette extension recommandée par l’équipe de curation communautaire et testée par Mozilla : Auto Tab Discard.

Cette extension empêchera les scripts des pages en arrière-plan de ralentir les onglets actifs et de drainer votre batterie. Son auteur vous promet qu’en utilisant une méthode native pour décharger les onglets et par conséquent que son extension n’a pas les inconvénients dont souffriraient les extensions similaires. Ainsi, avec cette méthode, les onglets déchargés n’utilisent pas de mémoire du tout et restaurent l’état précédent tout en préservant l’état de la page dont la position du défilement par exemple.

Options de déchargement des onglets

Penchons-nous sur ses options pour voir les possibilités qu’elle vous offre.

Auto Tab Discard : options

Dans les options de déchargement, vous pouvez choisir le nombre de secondes après lequel un onglet sera déchargé si la seconde option est dépassée (le nombre d’onglets inactifs).

Ensuite, vous disposez d’une liste blanche de noms de domaine (séparés par des virgules) à activer pour qu’uniquement les onglets contenant ces pages web soient déchargés.

En dessous figurent des cases à cocher pour aménager l’interface de Firefox pour cette extension :

  • un menu contextuel d’onglet
  • un menu contextuel de page
  • une entrée de menu contextuel de lien pour ouvrir le lien dans un onglet inactif

Conditions de déchargement

Dans la section Conditions de déchargement, vous pouvez choisir finement quels onglets déchargés ou conservés en activité. Donc, vous pouvez choisir de ne pas décharger un onglet quand :

  • un média est lu
  • des changements dans les formulaires (pour votre blog par exemple) n’ont pas encore été envoyés
  • l’ordinateur est connecté à une source d’énergie
  • il n’y a pas de connexion internet et que l’onglet n’est pas mis en cache
  • l’onglet peut afficher des notifications de bureau

Exceptions

Auto Tab Discard : options

Dans la section Exceptions, vous pouvez remplir une liste de noire des noms de domaine pour lesquels les onglets ne seront pas déchargés. Elle se remplit comme la liste blanche du début.

Bouton de barre d’outils

La section suivante permet d’assigner une action lors d’un clic gauche sur le bouton de l’extension dans la barre d’outils de Firefox. Vous pouvez choisir :

  • d’ouvrir le panneau du bouton
  • de décharger l’onglet en cours
  • de décharger tous les autres onglets
  • de décharger tous les autres onglet de la fenêtre en cours
  • de décharger tous les onglets dans les autres fenêtres

Enfin, la section Divers permet :

  • d’afficher les logs (pour des besoins de débogage uniquement)
  • de décharger un onglet s’il est caché
  • d’ouvrir la page de FAQ lors des mises à jour de l’extension

Gestion des options

En bas de page d’options, Auto Tab Discard permet d’exporter les paramètres pour les sauvegarder afin de pouvoir les rétablir après une réinitialisation du profil, l’ajout d’un profil ou une réinstallation du système d’exploitation. Vous pourrez aussi importer les paramètres dans un nouveau navigateur, système d’exploitation ou ordinateur.

N’oubliez pas de sauvegarder les changements apportés aux options que vous pouvez d’ailleurs réinitialiser à leurs valeurs d’installation de l’extension.

Interface

Comme nous l’avons vu, l’extension dispose d’éléments d’interface activables ou désactivables, tels qu’un badge sur les onglets désactivés, un panneau de bouton de barre d’outils, et des menus contextuels d’onglet et de page.

Auto Tab Discard : badge d'onglet

Auto Tab Discard : panneau de bouton

Auto Tab Discard : menu contextuel d'onglet

Auto Tab Discard : menu contextuel de page

Nous espérons avoir bientôt une traduction française incluse dans l’extension.


Nom
Auteur
Catégorie
Audience
Licence
Auto Tab Discard Richard Neomy Onglets Pour tous MPL 2.0

Vidéo de présentation d’Auto Tab Discard (3 min 13)


Avez-vous des extensions permettant d’améliorer les performances de Firefox à partager avec la communauté ?


Mozinet

Précédent article sur les extensions : Nouveau Twitter – quelles extensions pour Firefox ?

Nouveau Twitter avec boite de modification de l’affichage Twitter vient de pousser sa nouvelle interface pour navigateurs sur ordinateur de bureau qui ressemble beaucoup à la version mobile. Déjà, pas mal d’extensions pour Firefox prétendent remettre l’ancienne version…

Vous avez un assistant vocal ? Quelqu'un écoute-t-il vos moments d'intimité ?

Amazon, Apple et Google détiennent l’essentiel des parts de marché des assistants vocaux. Avec la révélation récente de leur processus d’examen humain, de nombreux consommateurs sont préoccupés par leur vie privée. Nous avons donc créé cette infographie afin que des personnes comme vous puissent contrôler plus facilement leurs paramètres de vie privée.

Partager l’infographie

Bonjour,

Si vous avez un assistant vocal chez vous ou sur votre téléphone, vous êtes-vous déjà demandé⋅e si un employé de l’entreprise pouvait écouter vos enregistrements vocaux ?

L’actualité des derniers jours confirme ces craintes.

Fin juillet, le Guardian a révélé que des employés d’Apple écoutaient régulièrement des enregistrements de moments extrêmement privés, tels que des conversations avec des médecins, des relations sexuelles et d’autres encore. Bien que cette initiative ait été mise en place comme une mesure de contrôle de la qualité, les utilisateurs et utilisatrices ne savaient probablement pas qu’une partie de ce qu’ils prononçaient était enregistré et écouté par des humains.1

Depuis lors, Apple a temporairement suspendu son programme de contrôle humain.2 Google a été contraint de suspendre son propre programme de contrôle dans l’Union européenne et Amazon offre désormais aux utilisateurs et utilisatrices la possibilité de ne pas participer.

Mozilla a élaboré un guide pour vous aider à modifier vos paramètres de vie privée sur les assistants vocaux.

Comment refuser les écoutes des enregistrements de votre assistant vocal

Cliquez ici pour savoir comment modifier vos paramètres et partager l’infographie.

Malgré ces paramètres de vie privée supplémentaires, ces programmes soulèvent toujours un certain nombre de préoccupations qui n’ont pas encore été résolues. Certaines de ces préoccupations sont :

  1. Pour les utilisateurs et utilisatrices qui n’ont pas refusé l’écoute, les employés d’Amazon et de Google écoutent toujours un petit pourcentage d’enregistrements provenant d’assistants vocaux intelligents. Malgré les efforts déployés pour rendre ces données anonymes, ces enregistrements peuvent contenir des informations sensibles et personnellement identifiables.3
  2. Dans de nombreux cas, les enregistrements ont été réalisés sans que personne ne prononce le mot déclencheur (« OK Google ») ou parce qu’on a dit quelque chose qui ressemblait au mot déclencheur (comme « Syrie », activant Siri d’Apple). Les gens ne savaient peut-être pas qu’ils étaient enregistrés une fois que l’appareil avait été activé pour écouter.4,5
  3. Jusqu’aux révélations récentes sur cette question, ces programmes d’analyse n’étaient pas clairement divulgués aux utilisateurs et utilisatrices. Certains, comme Amazon, ne permettaient pas aux personnes de choisir de participer ou non. De plus, de nouvelles informations continuent à être publiées, à savoir que d’autres sociétés, telles que Facebook, ont également recours à l’analyse humaine d’autres types de contenus vocaux sans informer clairement au préalable. Ce qui soulève des questions sur ce à quoi devrait ressembler un consentement significatif quand les données des personnes sont utilisées pour entraîner un modèle qui permet d’améliorer le produit. 6,7

Nous suivrons l’évolution de la question et, bien entendu, nous plaiderons en faveur de plus de transparence et d’une protection renforcée de la vie privée dans des publications telles que notre guide Privacy Not Included, entre autres.

En attendant, il est important que les consommateurs comme vous sachent comment définir les paramètres de confidentialité de leur propre assistant vocal. Pouvez-vous partager cette infographie pour faire passer le mot ?

Merci,
L’équipe Mozilla

Références :

  1. Alex Hart, « Apple contractors ‘regularly hear confidential details’ on Siri recordings », The Guardian, 26 juillet 2019.
  2. Taylor Mahlandt, « How to Stop Amazon, Apple, or Google From Listening to Your Smart Speaker Recordings, », Slate, 6 août 2019.
  3. Sarah Perez, « 41% of voice assistant users have concerns about trust and privacy, report finds » TechCrunch, mai 2019.
  4. James Vincent, « Yep, human workers are listening to recordings from Google Assistant, too » The Verge, 11 juillet 2019.
  5. Jeremy Horwitz, « Apple Siri contractors often hear up to 30 seconds of accidental recordings » VentureBeat, 26 juillet 2019.
  6. Sarah Frier, « Facebook Paid Contractors to Transcribe Users’ Audio Chats », Bloomberg, 13 août 2019.
  7. Paul Sawers, « Apple and Google halt human voice-data reviews over privacy backlash, but transparency is the real issue », VentureBeat, 2 août 2019.

Traduit par la communauté Mozilla francophone

Vous pouvez vous inscrire aux messages de Mozilla et les recevoir directement dans votre boîte aux lettres électronique.

Nouveau Twitter – quelles extensions pour Firefox ?

Nouveau Twitter avec boite de modification de l'affichageTwitter vient de pousser sa nouvelle interface pour navigateurs sur ordinateur de bureau qui ressemble beaucoup à la version mobile. Déjà, pas mal d’extensions pour Firefox prétendent remettre l’ancienne version[¹]. La presse IT s’est même emparée de la nouvelle. Mais jusqu’à quand Twitter le permettra-t-il ?

Nous avons choisi de faire un tour des extensions spécifiques pour Twitter compatibles avec la nouvelle version du site.

Nom
Auteur
Catégorie
Audience
Licence
GoodTwitter Zusor Affichage Twittos Licence MIT/X11

TweetDeck

Si vous utilisez le site web de gestion multicompte de Twitter, TweetDeck, vous n’êtes pas concerné·e par le changement du site twitter.com. Nous avons quand même une extension pour vous : Better TweetDeck (@BetterTDeck sur Twitter).

Cette extension apporte des améliorations fonctionnelles et esthétique à TweetDeck grâce à de nombreux paramètres. Elle est traduite en français.

Tweetdeck Better avant et après Crédit Damien Erambert sur AMO

Nom
Auteur
Catégorie
Audience
Licence
Better TweetDeck 3 Damien Erambert Personnalisation Twittos avancés Licence MIT/X11

Un conteneur pour Twitter

Mozilla a développé et promeut Facebook Container sur la base des Containers ou onglets contextuels. Cette fonctionnalité sans pareil permet à Firefox d’isoler un ou plusieurs sites web dans son/leur propre contexte, sans interaction avec les sites présents dans d’autres contextes.

Cela permet d’avoir plusieurs instances du même site (comme Twitter) tournant en parallèle ; vous pouvez donc avoir tous vos comptes Twitter ouverts dans le même Firefox, en même temps.

Mais cette fonctionnalité permet aussi d’isoler un ou plusieurs sites déterminés du reste de la navigation. C’est ce que Mozilla a fait avec Facebook Container pour les sites de la galaxie Facebook. Des dev tiers se sont emparés de l’extension pour proposer l’isolation d’autres sites qui peuvent vous pister sur le Web. Ainsi a été créé Twitter Container par Vishwa.

Au premier lancement de Twitter, après son installation, l’extension vous déconnectera de Twitter et vous proposera de vous y connecter dans un nouveau contexte « Twitter » avec son étiquette dans la barre d’adresse. Vous ne pourrez plus avoir plusieurs comptes Twitter ouverts dans différents contextes puisque Twitter s’ouvrira toujours dans le contexte « Twitter ».

Twitter Container : contexte Twitter avec page de connexion

Nom
Auteur
Catégorie
Audience
Licence
Twitter Container Vishwa Vie privée Twittos MPL 2.0

Twitter dans le panneau latéral

Pour utiliser le site de Twitter dans votre panneau latéral, vous pouvez utiliser l’extension générique de Mozilla issue du défunt programme Test Pilot, Side View. Cette extension vous permet d’avoir deux pages côte à côte que ce soit pour travailler en parallèle ou garder un œil sur une page pendant votre navigation, comme Twitter.

Twitter dans Side View

Pour une extension spécifique à Twitter, essayez Twitter as a Sidebar d’Andre Alves Garzia.

Twitter as a Sidebar

Nom
Auteur
Catégorie
Audience
Licence
Side View Ian Bicking, John Gruen, Donovan Preston Panneau latéral Twittos MPL 2.0
Twitter as a Sidebar Andre Alves Garzia Panneau latéral Twittos MPL 2.0

Images

Twitter Origifier affiche les images à leur taille d’origine. Faites un clic-droit et sélectionnez Afficher l’image pour l’obtenir dans sa taille de postage.

Twitter Origifier

Nom
Auteur
Catégorie
Audience
Licence
Twitter Origifier Nathan Wentworth Affichage Twittos Licence MIT/X11

Cacher les indicateurs chiffrés

L’extension Twitter Demetricator cache tous les scores sur Twitter. Nombre d’abonnés, de J’aime, de retweets, tous disparaissent. Comme le dit son résumé sur AMO, « le résultat vous permet d’essayer un Twitter sans les chiffres, pour voir ce qu’il se passe quand vous ne pouvez plus vous juger vous-même ou les autres en termes de mesures chiffrées. »

Le bouton de l’extension laisse apparaître un panneau doté d’un commutateur pour activer ou désactiver Twitter Demetricator.

Twitter Demetricator avec et sans

Nom
Auteur
Catégorie
Audience
Licence
Twitter Demetricator Ben Grosser Affichage Twittos GNU GPL 3.0

Twitter minimaliste

Voici deux extensions qui veulent encore épurer Twitter.

Minimal Twitter permet aussi de supprimer les compteurs parmi ses options pour ne garder que l’essentiel : la boîte de rédaction, la chronologie et la colonne de boutons.

Minimal Twitter : options

Nouveau Twitter avec Minimal Twitter

Productive Twitter ne propose pas lui d’options. Il se contente de retirer les boîtes superflues et de quelques modifications du nouveau thème de Twitter. L’extension fonctionne le mieux avec le thème foncé et la couleur rose (cliquez sur le bouton des trois points à gauche puis sur Affichage).

Nouveau Twitter avec Productive Twitter

Nom
Auteur
Catégorie
Audience
Licence
Minimal Twitter Thomas Wang Affichage Twittos Licence MIT/X11
Productive Twitter sarah_edo Affichage Twittos Licence BSD

Vous pouvez explorer AMO pour d’autres extensions relatives à Twitter. Vous pourrez ainsi y trouver des extensions pour faciliter le téléchargement de contenus sur Twitter comme des images ou des vidéos.


Et vous ? avez-vous de supers extensions pour réseaux sociaux à faire découvrir à la communauté ?

Comptes Twitter et + à suivre…

Mozilla francophone sur Twitter : @mozilla_fr (communauté)

Mozilla Firefox en français sur Twitter : @firefox_FR (Mozilla et communauté)

Toutes les actualités du projet Mozilla en français : @MozillaZineFr (indépendant)

Nos autres réseaux sociaux :


Note

[1] vous pouvez le faire manuellement : saisissez about:config dans la barre d’adresse, cliquez-droit, survolez Nouvelle et cliquez sur Chaîne de caractères. Dans la boîte Nouvelle valeur, entrez « general.useragent.override.twitter.com » et dans Saisissez une nouvelle valeur « Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko ». Supprimez les cookies de Twitter (vous pouvez le faire depuis le ⓘ au début de la barre d’adresse) et reconnectez-vous.



Mozinet

Notre dernière revue d’extension : Calendrier de l’Avent Extensions : toutes nos surprises

Notre calendrier de l’Avent s’est achevé et nous lui avons adjoint 2 bonus pour vous proposer les 24 extensions promises. (Re)découvrez-les tranquillement…

La grande annonce de la FTC sur Facebook

Nuage de mots autour du logo de FacebookBonjour,

Mercredi dernier, la Commission fédérale du commerce (FTC, Federal Trade Commission) des États-Unis a annoncé un accord concluant 16 mois d’enquête sur Facebook. En échange, Facebook a accepté de payer une amende de 5 milliards de dollars et d’apporter un certain nombre de modifications quant au respect de la vie privée.

La décision couvre un certain nombre de pratiques qui portent atteinte à la vie privée des utilisateurs et utilisatrices, notamment le fait d’utiliser, à des fins publicitaires, les numéros de téléphone collectés pour des raisons de sécurité, sans avertir les utilisateurs et utilisatrices que leur numéro de téléphone serait utilisé à des fins marketing.1

Facebook a de nombreuses ombres au tableau en matière de vie privée, mais celle-ci détériore la confiance en l’authentification à deux facteurs (2FA, Two-factor authentication), une fonctionnalité de sécurité essentielle qui permet aux utilisateurs et utilisatrices de recevoir un code par SMS lors de la connexion pour confirmer leur identité.

Lorsque les chercheurs ont découvert pour la première fois que Facebook utilisait à des fins marketing les numéros de téléphone de l’authentification à deux facteurs, des dizaines de milliers de personnes parmi vous ont participé à notre campagne invitant l’entreprise à cesser immédiatement cette pratique. C’est ce que Facebook a accepté de faire dans le cadre de la décision de la FTC.

Cet accord est sans précédent, et pourtant, il ne va pas assez loin. Rebecca Kelly Slaughter, l’une des commissaires contestataires de la FTC, a déclaré : « Bien que cet accord soit historique, pour que je le soutienne, il me faudrait être convaincue que l’ensemble de ses conditions dissuade effectivement Facebook de commettre de nouvelles infractions et que son message soit : violer des décisions ne vaut pas les risques encourus. »2

C’est pourquoi le travail que nous continuons à faire ensemble pour que Facebook et les autres grandes entreprises du secteur soient responsables est si important. Avec votre soutien, Mozilla continuera de mener des campagnes stratégiques afin de protéger la vie privée des consommateurs et consommatrices.

Certaines personnes ont dit que cet accord avec la FTC n’était qu’un simple tirage d’oreille pour Facebook. Et en effet, cette amende historique ne représente qu’un mois de profits réalisés par Facebook.3 C’est la raison pour laquelle nous allons devoir tous et toutes nous mobiliser, nous qui travaillions pour la défense et la protection des consommateurs, afin d’obliger Facebook à prendre ses responsabilités et militer pour des protections complètes et efficaces de notre vie privée.

Merci
Kaili, au nom de l’équipe Mozilla

PS : Nous resterons mobilisés pour protéger les données personnelles et lutter pour une sécurité accrue, et nous continuerons à tenir Facebook et les autres grandes entreprises high-tech responsables de leurs actes. Pourriez-vous soutenir le travail de Mozilla en faisant un don afin que nous puissions continuer à mener des campagnes de mobilisation efficaces comme celle-ci ?

Oui, je fais un don

Sources :

  1. Tony Romm, « Facebook deceived users about the way it used phone numbers, facial recognition, FTC to allege in complaint », The Washington Post, 23 juillet 2019.
  2. David McCabe, « Facebook settles with FTC regulators over privacy », Axios, 24 juillet 2019.
  3. Nilay Patel, « Facebook’s $5 billion FTC fine is an embarrassing joke », The Verge, 24 juillet 2019.

Parmi nos articles sur Facebook, deux concernent cette affaire :


Traduit par la communauté Mozilla francophone

Vous pouvez vous inscrire aux messages de Mozilla et les recevoir directement dans votre boîte aux lettres électronique.

Crédit illustration ajoutée sur le blog : 905513 sous licence permissive Pixabay.