Planet Libre

genma : Cours sur les serveurs web par Luc Didry

Luc Didry, qui se présent lui-même comme un Administrateur Systèmes, Perliste fou, Debianeux convaincu, Libriste radical, est également connu sous son pseudonyme de Framasky et pour ses activités d' Administrateur systèmes au sein de l'association Framasoft.

Il est (a été ?) également enseignant pour la formation de la Licence Professionnelle Administration de Systèmes, Réseaux et Applications à base de Logiciels Libres (asrall.fr, adresse qui redirige vers le programme de la formation.

Ses cours (avec quelques exercices en bas de page) sont mis à disposition sur son site https://luc.frama.io/cours-asrall/serveurs_web/index.html. Au sommaire :
- Introduction
- Autres élément de configuration
- Les hôtes virtuels & les journaux
- Redirections, contrôles d'accès & chiffrement
- CGI & cache
- Mesures de performance

Des tutoriels sur Apache et Nginx et leurs configurations, j'en ai lu un certain nombre et ce cours est probablement le meilleur que j'ai lu. A la sortie, on a une très bonne référence pour la compréhension des fichiers de configuration d'Apache et Nginx, avec une comparaison entre eux, leurs spécificités et caractéristiques, avec les différentes options et leurs rôles respectifs.

Pour tout comprendre du contenu des fichiers de configuration d'Apache et Nginx, dans le détail, mais de façon claire, précise et pédagogue, je ne peux donc que recommander de lire ce cours. J'ai compilé tout ça dans un document LibreOffice, il y en a pour 70 pages... De quoi s'occuper quelques heures. Et un grand MERCI à Luc aka Framasky pour ce super boulot et sa mise à disposition.

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Renault : Participez à la journée de test consacrée à la version Atomic / Cloud

Aujourd'hui, ce vendredi 29 septembre, est une journée dédiée à un test précis : sur l'image Atomic / Cloud de Fedora. En effet, durant le cycle de développement, l'équipe d'assurance qualité dédie quelques journées autours de certains composants ou nouveautés afin de remonter un maximum de problèmes sur le sujet.

Elle fournit en plus une liste de tests précis à effectuer. Il vous suffit de les suivre, comparer votre résultat au résultat attendu et le notifier.

En quoi consiste ce test ?

La version Atomic / Cloud de Fedora est un des trois produits officiels du projet avec Workstation et Server. Son but est d'être une image très minimale pour être instanciée de nombreuses fois dans le cadre d'un infrastructure Cloud afin de remplir le rôle d'un service. Cependant, contrairement aux deux autres produits, la version Cloud est mise à jour très régulièrement (de nouvelles images sont disponibles toutes les quelques semaines seulement, contre 6-7 mois en moyenne pour les autres).

Les tests du jour couvrent :

  • Est-ce que l'image démarre correctement, permet de se connecter et si les services se base se lancent bien ;
  • Vérifier si la gestion de Docker ou Atomic (installation, mise à jour, retour en arrière) fonctionne correctement ;
  • Lancement des applications ;
  • Vérifier la compatibilité avec le cloud Amazon et OpenStack.

Si vous êtes intéressés par l'aspect Cloud de cette image, je vous invite à la tester, elle bénéficie en effet de relativement peu de retours. La moindre aide est appréciée, merci.

Comment y participer ?

Vous pouvez vous rendre sur la page des tests pour lister les tests disponibles et rapporter vos résultats. La page wiki récapitule les modalités de la journée.

Si vous avez besoin d'aide lors du déroulement des tests, n'hésitez pas de faire un tour sur IRC pour recevoir un coup de main sur les canaux #fedora-test-days et #fedora-fr (respectivement en anglais et en français) sur le serveur Freenode.

En cas de bogue, il est nécessaire de le rapporter sur le BugZilla. Si vous ne savez pas faire, n'hésitez pas à consulter la documentation correspondante.

De plus, si une journée est dédiée à ces tests, il reste possible de les effectuer quelques jours plus tard sans problème ! Les résultats seront globalement d'actualité.

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

Articles similaires

Renault : Participez à la journée de test consacrée à GNOME 3.26

Aujourd'hui, ce jeudi 29 septembre, est une journée dédiée à un test précis : sur l'environnement de bureau GNOME. En effet, durant le cycle de développement, l'équipe d'assurance qualité dédie quelques journées autours de certains composants ou nouveautés afin de remonter un maximum de problèmes sur le sujet.

Elle fournit en plus une liste de tests précis à effectuer. Il vous suffit de les suivre, comparer votre résultat au résultat attendu et le notifier.

En quoi consiste ce test ?

Nous sommes proches de la diffusion de la Fedora 27 beta. L'environnement de bureau GNOME est celui par défaut depuis les débuts de Fedora il y a 13 ans.

L'objectif est de s'assurer que l'ensemble de l'environnement et que ses applications sont fonctionnels.

Les tests du jour couvrent :

  • La détection de la mise à niveau de Fedora par GNOME Logiciels ;
  • Le bon fonctionnement du navigateur Web ;
  • La connexion / déconnexion et changement d'utilisateurs ;
  • Le fonctionnement du son, notamment détection de la connexion ou déconnexion d'écouteurs ou casques audios ;
  • Possibilité de lancer les applications graphiques depuis le menu.

Comme vous pouvez le constater, ces tests sont assez simples et peuvent même se dérouler sans se forcer en utilisant simplement GNOME comme d'habitude. Donc n'hésitez pas de prendre quelques minutes pour vérifier les comportements et rapporter ce qui fonctionne ou non comme attendu.

Comment y participer ?

Vous pouvez vous rendre sur la page des tests pour lister les tests disponibles et rapporter vos résultats. La page wiki récapitule les modalités de la journée.

Si vous avez besoin d'aide lors du déroulement des tests, n'hésitez pas de faire un tour sur IRC pour recevoir un coup de main sur les canaux #fedora-test-days et #fedora-fr (respectivement en anglais et en français) sur le serveur Freenode.

En cas de bogue, il est nécessaire de le rapporter sur le BugZilla. Si vous ne savez pas faire, n'hésitez pas à consulter la documentation correspondante.

De plus, si une journée est dédiée à ces tests, il reste possible de les effectuer quelques jours plus tard sans problème ! Les résultats seront globalement d'actualité.

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

Articles similaires

Framablog : (se) Dégoogliser en toute facilité

Lundi, nous vous annoncions la refonte du site Dégooglisons Internet. Aujourd’hui, nous vous proposons un petit tour des co-propriétaires (ben oui : il est sous licence CC-By-SA !), afin que vous puissiez encore mieux vous emparer de cet outil pour vous dégoogliser, et dégoogliser votre entourage.

Les GAFAM, au bûcheeeeeeer !

Le site Dégooglisons Internet a servi, durant trois ans, à présenter une campagne d’information, d’actions, d’intentions de Framasoft tout en proposant un portail d’accès aux services qui venaient s’ajouter aux conquêtes de la communauté libriste.

Maintenant que nous avons conclu cette campagne, il va remplir une fonction unique : faciliter l’adoption de services éthiques, respectueux de ces données personnelles qui décrivent nos vies numériques. En trois ans, nous avons fait bien plus qu’héberger des services, et il était grand temps de vous présenter tout cela de manière claire et facile d’accès.

Dès l’accueil, nous vous invitons à faire feu des GAFAM (les géants du web que sont Google, Apple, Facebook, Amazon et Microsoft) en expliquant en trois bulles la problématique à laquelle nous essayons de répondre.

Bien vite, on arrive au cœur de la proposition : les services. Si vous ne pouvez pas les essayer, comment pourrez-vous les adopter ? Nous vous invitons donc à trouver le service que vous cherchez suivant deux entrées possibles (on y reviendra !)

Néanmoins, tester des services n’est qu’une première étape, et nous vous proposons ensuite d’aller plus loin :

Seulement voilà, vous pouvez aussi vous poser des questions sur les raisons d’une telle démarche. C’est même très sain, puisque c’est ainsi que peut naître la confiance (ou la défiance, d’ailleurs) : ce sentiment qui nous pousse à confier nos données, nos vies numériques, à un hébergeur. Nous exposons donc :

Tout ceci est, et demeure, une aventure collaborative. Nous prenons donc le temps d’expliquer :

Un espace final est réservé aux médias qui ont parlé de cette aventure, avec un lien vers notre espace médias, que chacun·e peut librement visiter et utiliser.

Chacun·e peut trouver service à son pied

Nous avons décidé de présenter de deux manières différentes les 32 services qui sont actuellement à votre disposition, car tout le monde ne cherche pas de la même manière.

La première démarche, lorsque l’on cherche selon un besoin précis, correspond à cette partie de la page d’accueil :

Cela vous mènera vers une toute nouvelle page où les services sont classés selon les usages, avec une barre de recherche pour mieux vous aider à trouver celui qui correspond à vos attentes :

La deuxième démarche consiste à chercher un service alternatif au service propriétaire que l’on utilise et que l’on connaît.

Ici vous retrouverez d’abord la fameuse carte Dégooglisons, où il vous suffit de cliquer sur le camp romain du service qui vous intéresse pour en découvrir une alternative.

Mais il n’y a pas que les « Framachins » dans la vie. Très vite, vous trouverez en dessous de cette carte une liste bien plus complète d’alternatives en tous genres pour se dégoogliser plus complètement. Cette liste est inspirée de l’excellent site Prism-Break, un site à garder dans ses marque-pages !

Un exemple, totalement au hasard, pour les alternatives à l’email ;)

À vous de dégoogliser !

Vous l’avez saisi, l’idée du site degooglisons-internet.org, c’est qu’il vous soit utile. Que ce soit pour trouver des alternatives qui vous sont nécessaires, ou pour aider votre entourage à se dégoogliser, c’est désormais à vous de vous en emparer.

D’ailleurs, n’hésitez pas à aller visiter l’espace médias, qui s’est enrichi d’une fresque racontant ces trois années de Dégooglisons, ainsi que des dessins de Péhä, aux côtés de nombreux autres visuels libres… et à partager dans vos réseaux !

Nous espérons, sincèrement, que la refonte de ce site vous simplifiera la dégooglisation et même (soyons folles et fous) la vie !

 

Pour aller plus loin

Bienvenue au banquet concluant Dégooglisons Internet, par Péhä (CC-By)

Gravatar de Framablog
Original post of Framablog.Votez pour ce billet sur Planet Libre.

Articles similaires

Renault : Participez à la journée de test consacrée au noyau Linux 4.13

Aujourd'hui, ce mercredi 27 septembre, est une journée dédiée à un test précis : sur lo noyau Linux 4.13. En effet, durant le cycle de développement, l'équipe d'assurance qualité dédie quelques journées autours de certains composants ou nouveautés afin de remonter un maximum de problèmes sur le sujet.

Elle fournit en plus une liste de tests précis à effectuer. Il vous suffit de les suivre, comparer votre résultat au résultat attendu et le notifier.

En quoi consiste ce test ?

Le noyau Linux est le cœur du système Fedora (et des autres distributions GNU/Linux). C'est le composant qui fait le lien entre les logiciels et le matériel. C'est lui qui permet aux processus de travailler ensemble sur un même ordinateur et de pouvoir utiliser les périphériques (à travers des pilotes) disponibles sur chaque machine.

C'est donc un composant critique et il est nécessaire de s'assurer qu'il fonctionne.

Les tests du jour couvrent :

  • L'exécution des tests automatisés par défaut et ceux de performances ;
  • Vérifier que la machine démarre correctement ;
  • Vérifier que le matériel est bien exploité (affichage, claviers, souris, imprimantes, scanners, USB, carte graphique, carte son, webcam, réseau filaire et wifi, etc.)
Comment y participer ?

Vous pouvez vous rendre sur la page des tests pour lister les tests disponibles et rapporter vos résultats. La page wiki récapitule les modalités de la journée.

Si vous avez besoin d'aide lors du déroulement des tests, n'hésitez pas de faire un tour sur IRC pour recevoir un coup de main sur les canaux #fedora-test-days et #fedora-fr (respectivement en anglais et en français) sur le serveur Freenode.

En cas de bogue, il est nécessaire de le rapporter sur le BugZilla. Si vous ne savez pas faire, n'hésitez pas à consulter la documentation correspondante.

De plus, si une journée est dédiée à ces tests, il reste possible de les effectuer quelques jours plus tard sans problème ! Les résultats seront globalement d'actualité.

Gravatar de Renault
Original post of Renault.Votez pour ce billet sur Planet Libre.

Articles similaires

Carl Chenet : Pourquoi j’ai lancé le Courrier du hacker, newsletter sur le Logiciel Libre et Open Source

Plusieurs personnes m’ont demandé pourquoi j’avais créé le Courrier du hacker, une newsletter hebdomadaire sur l’actualité du Logiciel libre et Open Source francophone, qui a dépassé les 200 abonnés en 15 jours d’existence.

E-mail S'abonner

Je suis en effet le cofondateur du Journal du hacker, d’où sont tirés les liens que proposent le Courrier du hacker. Proposer un contenu déjà publié sur le Journal du hacker peut apparaître à certains comme une initiative redondante.

J’ai constaté qu’avec le succès croissant du Journal du hacker, les liens proposés étaient de plus en plus nombreux chaque semaine. Et que donc l’information tournait de plus en plus vite. En effet il y a encore un an un lien pouvait rester plusieurs jours sur la première page, c’est aujourd’hui quasiment impossible.

Nous sommes tous très occupés et nous passons d’une activité à l’autre. Rares sont donc ceux qui peuvent se permettre de se connecter fréquemment au même site. Inévitablement les personnes effectuant une veille risquait de rater des informations importantes.

En discutant avec des personnes concernées par ce problème, l’idée de créer une newsletter hebdomadaire m’est rapidement apparue comme comblant un réel besoin. après avoir posé la question depuis mon compte Twitter et Mastodon, plusieurs réponses enthousiates ont appuyé ma proposition. J’ai choisi de publier cette newletter le vendredi, afin que les lecteurs aient tout le week-end pour ouvrir l’e-mail et le parcourir.

Je suis moi-même abonné à beaucoup de newsletters et je découvre souvent de très bonnes choses dedans, quand à l’occasion d’une petite pause ou souvent le week-end j’ouvre la newsletter, parfois plusieurs jours après l’avoir reçue.

Cette façon de consommer l’information, un peu plus en retrait de l’action et avec une préselection du contenu par des personnes auxquelles je fais confiance me convient tout à fait.

Et vu l’enthousiasme autour des abonnements au Courrier du hacker, il semble que je ne sois pas le seul 😉

Gravatar de Carl Chenet
Original post of Carl Chenet.Votez pour ce billet sur Planet Libre.

Articles similaires

Thuban : LibreSSL 2.6.2

La version 2.6.2 de LibreSSL est sortie !

Il s'agit de la troisième version de développement de la série des 2.6, qui sera probablement intégrée dans le système de base d'OpenBSD 6.2. Elle intègre les changements suivants :

  • Fourni une erreur utile avec libtl s'il n'y a pas d'URL OCSP dans un certificat par les pairs.
  • Garde trace de quelle paire de clé est en cours d'utilisation dans un contexte TLS, ce qui corrige un bug où un serveur TLS avec SNI ne pouvait retourner que l'élément de base OCSP pour la paire de clés par défaut. Ce problème a été rapporté par William Graeber et confirmé par Andreas Bartelt.
  • Correction de plusieurs erreurs dans le code d'analyse de l'extension OCSP. Le code d'origine passait incorrectement un pointeur qui donnait probablement lieu à un crash. Cette erreur a été rapportée par Robert Swiecki qui l'a trouvée avec hongfuzz.
  • Si la fonction tls_config_parse_protocols() est appelée avec un pointeur NULL, on retrourne le protocole par défaut au lieu de crasher. Cela rend ce comportement plus pratique et copie ce qui est déjà fait dans tls_config_set_ciphers et al.

Le projet LibreSSL continue les améliorations de la base du code pour le rendre moderne avec de bonnes pratiques de programmation. Les retours et améliorations sont bienvenus par toute la communauté. Merci à tous les contributeurs qui ont aidé à rendre cette publication possible.

 

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

dada : Ubuntu Touch OTA-2 disponible et Librem 5





J'en parlais il y a maintenant 4 mois, les gars d'UBPorts ont pris le relais de Canonical pour le développement d'Ubuntu Touch. Après nous avoir fait profiter d'une mise à jour en juin, ils reviennent avec une OTA-2 !
Au programme de cette «Over The Air» numéro 2, pas grand chose, qu'on se le dise. Les plus heureux devraient être les propriétaires de Nexus 5 et de OnePlus. Ces deux appareils concentrent la grande majorité des quelques les corrections de bug. Ceci-dit, hors de question de bouder une mise à jour, ça ne se fait pas !

Nous avons donc :
  • Amélioration du magasin d'application OpenStore
  • La possibilité de changer facilement entre les canaux stable/RC/développement.
  • Le support direct de Caldav dans le calendrier intégré (!)
  • Correction du crash navigateur quand l'appareil est branché à un écran externe
  • Et le reste par ici.

J'en profite pour balancer un commentaire un peu trollesque sur ce truc :





Comme dit dans les commentaires de ce Toot, après Firefox OS et Ubuntu Touch, j'avoue être devenu très frileux vis-à-vis des tentatives qui s'acharnent à faire des OS pour appareils mobiles. UBPorts fait très bien le boulot sur ma tablette et c'est maintenant hors de question de bidouiller mon téléphone ou d'en acheter un autre. Mon Fairphone 2 ne bougera pas avant de très nombreuses années !

M'enfin, si vous voulez mettre la main à la poche, laissez-vous aller, l'idée sera peut-être un réussite !


Gravatar de dada
Original post of dada.Votez pour ce billet sur Planet Libre.

Framablog : Framasoft : on vous a fait un dessin !

Ça nous étonne souvent. L’image de Framasoft est parfois bien loin de notre réalité quotidienne. Partant de l’adage selon lequel une image vaut plus que mille mots, nous sommes allé·e·s demander de l’aide à un certain Geoffrey Dorne.

Framasoft : une image disproportionnée

Même si nous essayons de nous présenter en toute transparence, nombre de personnes qui bénéficient de nos projets et services ne savent pas vraiment qui nous sommes.

Nous le constatons principalement dans les questions, suggestions (voire exigences) qui sont exprimées dans le support, sur les stands ou dans les réseaux sociaux : nous avons parfois l’image d’une grosse boite de logiciels, armée de centaines d’employé·e·s et d’un budget ministériel ^^. Cela provient peut-être d’un nom créé en réaction à Microsoft, à l’époque où la firme de Redmond régnait sur le monde informatique.

Bref, rétablissons un peu la réalité. 35 membres (dont 7 salarié·e·s) gèrent une association qui anime et maintient une cinquantaine de projets auxquels plus de 700 personnes contribuent. Ces projets sont financés par plus de 2000 donateurs et donatrices, avec un budget avoisinant les 250 000 € par an (ça varie selon les années ^^)…

Ces dons, qui représentent 90 % de nos revenus, sont ce qui nous permet d’accueillir entre 200 000 et 400 000 personnes sur nos sites web chaque mois, de participer à une centaine d’événements par an, d’y distribuer des milliers de flyers et stickers… Énorme pour une bande de potes, mais on est loin de la multinationale !

Du coup, au lieu d’aligner des chiffres en mode entreprise-qui-fait-trop-sérieux, le mieux, c’est de vous les montrer.

L’infographie « Le monde de Framasoft »

Geoffrey Dorne est un designer éthique, auteur du blog Graphism.fr et fondateur de l’agence Design & Human. Cela fait un moment que nous nous suivons, mutuellement, sur les réseaux sociaux et dans nos actions respectives, avec une complicité grandissante. Nous lui avons donc demandé de nous aider à présenter Framasoft et son évolution après ces trois années de campagne Dégooglisons Internet, qui ont entraîné de nombreuses mutations dans notre association, ainsi que dans le réseau de projets.

Nous tenons à le remercier pour l’attention, le talent et l’humanité qu’il a apportées à la commande de cette infographie, qu’il a placée sous la licence libre CC-By-SA.

Et puis soyons franc·he·s, nous avons été un peu pénibles ! C’était compliqué de mettre tout notre bazar dans une seule image qui convienne aux sensibilités diverses de nos personnes, non moins variées. Le résultat ? C’est à vous de nous dire, et surtout de vous en emparer.

Cliquez sur l’image pour l’agrandir.
Infographie réalisée par Geoffrey Dorne, CC-By-SA

 

Pour aller plus loin

 

 

Gravatar de Framablog
Original post of Framablog.Votez pour ce billet sur Planet Libre.

Articles similaires

Framablog : Dégooglisons Internet : c’est la fin du début !

Rassurez-vous : hors de question de fermer les services ni de s’arrêter en si bon chemin ! Seulement voilà : en octobre 2014, nous annoncions nous lancer dans la campagne Dégooglisons Internet pour les 3 années à venir.

3 ans plus tard, il est temps de conclure ce chapitre… pour mieux continuer cette histoire commune.

Nous étions jeunes et flou·e·s !

Nous en avons déjà parlé, le succès de la campagne Dégooglisons Internet nous a pris par surprise.

Nous nous lancions dans un pari flou, non pas celui de remplacer Google et consorts (il n’en a jamais été question, même s’il nous a fallu le préciser à chaque fois, à cause d’un titre trop accrocheur), mais celui de sensibiliser qui voulait l’entendre à un enjeu sociétal qui nous inquiète encore aujourd’hui : la captation des données numériques qui décrivent nos vies (rien de moins) par quelques grands acteurs privés, les trop fameux GAFAM (pour qui découvre tout cela, on parle de Google, Apple, Facebook, Amazon et Microsoft) et tous les prédateurs qui ne rêvent que de prendre leur place et qui un jour ou l’autre leur tailleront des croupières.

Cliquez sur l’image pour lire la BD « La rentrée des GAFAM », par Simon « Gee » Giraudot.

 

Pour cela, nous souhaitions démontrer que le logiciel libre est une alternative éthique et pratique, en proposant sur trois ans la mise en ligne de 30 services alternatifs à ceux des GAFAM, tous issus du logiciel libre. L’idée de cette démonstration, dans nos têtes, était simple :

Venez tester les services chez nous, utilisez-les tant que vous n’avez pas d’autre solution, puis voguez vers votre indépendance numérique en cherchant un hébergement mutualisé, en les hébergeant pour votre asso/école/syndicat/entreprise/etc. ou carrément en auto-hébergeant vos services web chez vous !

Sur le papier ça paraissait simple, comme allant de soi. Bon OK, c’était déjà un sacré défi, mais un défi naïf. Car nous n’avions pas prévu ni l’engouement de votre côté ni la complexité de proposer un tel parcours… Bref, nous nous sommes confrontés à la réalité.

C’est en dégooglisant qu’on devient dégooglisons

Nous avons eu la chance qu’une telle proposition (que d’autres ont pu faire avant nous et à leur manière, la mère zaclys, lautre.net, infini.fr, etc.) arrive à un moment et d’une façon qui a su parler à un public bien plus large que le petit monde libriste, tout en étant saluée par ce dernier.

Sauf qu’un grand coup de bol implique de grandes responsabilités : avec près d’une centaine de rencontres par an (publiques et/ou privées), que ce soit dans des conférences, des ateliers, des stands, des festivals, des partenariats… Nous avons appris et compris de nombreuses choses :

  • Proposer un service fonctionne mieux dans les conditions de la confiance (transparence sur les Conditions Générales d’Utilisation et le modèle économique, réputation, jusqu’à cet affreux nommage des Frama-trucs, qui rassure mais que même nous on n’en peut plus !) ;
  • Proposer ne suffit pas, il faut accompagner la transition vers un service libre, avec des tutoriaux, des exemples d’utilisation, un peu de bidouille esthétique – car nous ne sommes ni ergonomes, ni designers – des ateliers… et des réponses à vos questions. Donc beaucoup, beaucoup, beaucoup de support ;
  • Notre proposition deviendrait contre-productive et centraliserait vos vies numériques si nous ne nous lancions pas, en parallèle, dans les projets qui vous permettront à terme de sortir de Framasoft pour aller vers l’indépendance numérique (parce que les tutos « comment faire la même chose sur vos serveurs » , c’est bien… et ça ne suffit pas).

Nous avons donc passé trois ans à écouter, à chercher et à comprendre ce que signifiait Dégoogliser Internet. Dégoogliser, c’est :

  • tester, choisir, adapter et proposer des services web alternatifs et les maintenir en place et à jour ;
  • et en même temps soutenir les personnes et communautés qui créent les logiciels derrière ces alternatives (la plupart du temps, ce n’est pas nous ! ! !) ;
  • et en même temps accompagner ces alternatives de documentations, tutoriels, exemples ;
  • et en même temps répondre aux invitations, aller à votre rencontre, faire des conférences et ateliers, communiquer sans cesse ;
  • et en même temps rester à votre écoute et répondre à vos questions aussi nombreuses que variées ;
  • et en même temps mettre en place les fondations vers des hébergements locaux et mutualités (comme les CHATONS, un collectif « d’AMAP du numérique ») ou vers l’auto-hébergement (en consacrant du temps salarié de développement au projet YUNOHOST) ;
  • et en même temps poursuivre une veille sur les nouvelles trouvailles des GAFAM pour mieux vous en informer, ainsi que sur ces personnes formidables qui cherchent à mieux cerner les dangers pour nos vies et nos sociétés ;
  • et en même temps vous donner la parole pour mettre en lumière vos projets et initiatives ;
  • et en même temps ne pas oublier de vous demander votre soutien, car ce sont vos dons qui assurent notre budget pour continuer ;
  • et en même temps boire des coups, avec ou sans alcool modération (non parce qu’on va pas faire tout ça dans la tristesse, non plus, hein !).

Ce que l’on retient de ces trois années…

…c’est qu’il est temps d’arrêter. Non pas d’arrêter de Dégoogliser (c’est loin d’être fini : on vous prépare plein de belles choses !), mais d’arrêter de le faire comme ça, à une telle cadence. Il y a dans ces trois ans un aspect publish or perish, « sors un service ou finis aux oubliettes » , qui ne convient pas à l’attention et au soin que l’on veut apporter à nos propositions.

Jusqu’à présent, cette cadence nous a servi à proposer 32 alternatives, un ensemble sérieux et solide, mais continuer ainsi pourrait desservir tout le monde.

Certes, il serait possible de transformer Framasoft en entreprise, de faire une levée de fonds de quelques millions d’euros, d’en profiter pour faire un « séminaire de team building » aux Bahamas (ouais, on a besoin de repos ^^) et de… perdre notre identité et nos valeurs. Ce n’est clairement pas notre choix. En trois ans, notre association est passée de 2 à 7 permanent·e·s (avec environ 35 membres), et même si cette croissance pose déjà de nombreux soucis, nous sommes fier·e·s de rester cette bande de potes qui caractérise l’association Framasoft, et de ne pas nous prendre au sérieux (tout en faisant les choses le plus sérieusement possible).

Ce que l’on retient, aussi, c’est que la problématique des silos de données centralisés par quelques monopoles mérite une réponse bien plus complexe et complète que simplement proposer « 32 services alternatifs ». Nous pourrions continuer et faire grimper les enchères : « 42… 42 sur ma gauche, 53, ah ! 69 services ! Qui dit mieux ? », mais à quoi bon si on n’inscrit pas cette réponse dans un ensemble d’outils et de projets pensés différemment de ce « GAFAM way of life » qui nous est vendu avec chaque Google Home qui nous écoute, avec chaque iPhone qui nous dévisage, et avec tous ces autres projets ubérisants ?

Cliquez pour découvrir comment un récent épisode de South Park a trollé les foyers possédant un Google Home, un Amazon Echo ou Siri sur ses produits Apple.
Image : © Comedy Central

Ce que l’on retient, enfin, c’est que nombre de personnes (qui ne s’intéressent pas spécialement à l’informatique ni au Libre) partagent, parfois sans le savoir, les valeurs du Libre. Ce sont des membres d’associations, de fédérations, des gens de l’Économie Sociale et Solidaire, de l’éducation populaire, du personnel enseignant, encadrant, formateur. Ce sont des personnes impliquées dans une vie locale, dans des MJC, des tiers-lieux, des locaux syndicaux, des espaces de co-working et des maisons associatives. Ce sont des personnes à même de comprendre, intégrer et partager ces valeurs autour d’elles et de nous enseigner leurs valeurs, connaissances et savoirs en retour.

Le plus souvent : c’est vous.

 

« OK, mais il est où mon Framamail ? »

Alors voilà, touchant du doigt la fin des 3 années annoncées, c’est l’occasion de faire le bilan (on vous prépare une belle infographie afin de raconter cela) et de prendre un peu de recul pour chercher quelle suite donner à cette aventure. Car c’est loin d’être fini : si nous avons bel et bien dégooglisé trente services, c’est que nous en avons rajouté en cours de route, et certains ne sont pas (encore) là…

Toi aussi, joue avec Framasoft au jeu des 7… 12… au jeu des plein de différences ! (Cartes « Dégooglisons Internet » 2014 et 2016, par Gee.)

 

Nous allons vous décevoir tout de suite : nous n’allons pas proposer de Framamail, tout du moins pas sous la forme que vous imaginez. L’e-mail est une technologie à la fois simple (dans sa conception) et extrêmement complexe (dans sa maintenance parmi le champ de mines que sont les SPAM et les règles imposées par les géants du web). C’est d’autant plus complexe si vous avez un grand nombre de boîtes mail à gérer (et ouvrir un Framamail, c’est risquer d’avoir 10 000 inscriptions dès la première semaine -_-…)

Nous sommes dans l’exemple typique de ce que l’on décrivait juste avant : si on ouvre un Framamail, et si on ne veut pas de pannes de plus de deux heures sur un outil aussi sensible, il nous faut embaucher deux administratrices système et un technicien support à plein temps juste pour ce service. Ce qui peut se financer par vos dons… mais au détriment des autres services et projets ; ou en faisant de vous des clients-consommateurs (alors que, depuis le début, nous cherchons à prendre chacun de nos échanges avec vous comme autant de contributions à cette aventure commune).

Heureusement, il existe d’autres pistes à explorer… pour l’email tout comme pour les alternatives à YouTube, Change.org, MeetUp, Blogger qu’il nous reste à rayer de la carte !

Bienvenue au banquet de Dégooglisons !

Bienvenue au banquet concluant Dégooglisons Internet, par Péhä (CC-By)

 

Il est donc temps de clore cet album, de sortir des gauloiseries en vous invitant à aiguiser vos canines sur les GAFAM… Nous en profitons pour remercier l’illustrateur Péhä de cette magnifique image qui nous permet de conclure en beauté ces trois années d’expérimentations en commun.

Nous vous proposons, dès aujourd’hui, une refonte complète du site Dégooglisons Internet visant à répondre au plus vite à vos attentes. C’est un peu la v1, la première mouture finie de ce portail, après trois années de gestation. Nous espérons que vous aurez encore plus de facilité à partager ce site pour Dégoogliser votre entourage.

Cette conclusion est pour nous l’opportunité d’avoir une pensée emplie de gratitude et de datalove pour toutes les personnes, les communautés, les bénévoles, les donatrices, les salariés, les passionnées, les partageurs, les contributrices… bref, pour cette foultitude qui a rendu cela possible.

Chaque fin d’album est surtout l’occasion de tourner la page, afin d’ouvrir un nouveau chapitre… Promis, ceci n’est que le début, on en reparle d’ici quelques semaines.

Merci, vraiment, du fond de nos petits cœurs de libristes, et à très vite,

L’équipe de Framasoft.

Gravatar de Framablog
Original post of Framablog.Votez pour ce billet sur Planet Libre.

Articles similaires

Angristan : Écrire en japonais sous Arch Linux

Lorsque l'on apprend le japonais ou que l'on le parle, il arrive un moment ou l'on a envie ou besoin de pouvoir s'exprimer en japonais sur un outil numérique. Quand je parle de japonais je parle bien sûr des Kana (Hiragana et Katakana) et des Kanji. Sur des systèmes d'exploitation tels que Android, iOS, macOS ou encore Windows, il est très facile de rajouter la disposition japonaise du clavier depuis les réglages. Sous Arch Linux, ça n'est absolument pas natif. Malgré une page de wiki dédiée, c'est vraiment très peu explicite, et c'est cet article qui m'a le plus aidé. Notez que je fais ce tutoriel pour Arch Linux, puis que c'est mon OS actuel, mais la démarche est similaire pour toutes les distributions GNU/Linux utilisant iBus et, c'est à dire la majorité. D'ailleurs iBus est une dépendance de Gnome donc il doit supprimer quelques étapes, mais si vous utilisez un autre environnement de bureau, comme chez moi KDE, il va falloir partir de zéro. Pour information, iBus est un gestionnaire de méthodes d'entrée pour des systèmes Linux et Unix, et ibus-anthy est la méthode d'entré japonaise pour iBus. Installation et configuration des polices Avant toute chose, nous allons installer les polices nous permettant d'avoir un bon rendu des Kanji et des Kana. Depuis les dépôts : sudo pacman -S adobe-source-han-sans-jp-fonts otf-ipafont Depuis le AUR (remplacer pacaur par votre gestionnaire de paquets pour le AUR) pacaur -S ttf-monapo Décommettez ja_JP.UTF-8 dans /etc/locale.gen. Installation et configuration On installe les paquets présentés plus haut : sudo pacman -S ibus ibus-anthy Ensuite on ajoute quelques lignes à notre xprofile, ce qui nous permet dans lancer iBus au démarrage de la session X. echo "# Settings for Japanese input export GTK_IM_MODULE='ibus' export QT_IM_MODULE='ibus' export XMODIFIERS=@im='ibus' # Toolbar for anthy ibus-daemon -drx" >> .xprofile Ensuite, redémarrez votre PC afin d'avoir les bonnes polices ainsi que l'icône iBus dans votre barre des tâches, puis accéder aux préférences via un clic droit. Pour info vous pouvez aussi accéder aux préférences via la commande ibus-setup. Ajoutez la disposition "Japonais - Anthy" Écrire en Japonais sous Arch Linux Ensuite vous pouvez cliquer sur "Préférences" pour modifier les nombres options disponibles. Écrire en Japonais sous Arch Linux Pour prendre en main ce nouveau clavier, voici quelques raccourcis utiles :
  • super + espace pour passer de français à japonais et inversement
  • espace lors de l'écriture d'un mot pour faire apparaître les suggestions (kanji et autres, voir GIF ci-dessous)
  • F6 pour passer le ou les signes soulignés en Hiragana
  • F7 pour passer les signes soulignés en Katakana
  • "l" + Kana pour écrire le petit Kana. Exemple : "l" + "つ" = "っ"
Écrire en Japonais sous Arch Linux Pour info les petits Kana sont remplacés automatiquement dans les combinaisons comme きゅ ou みょ, et dans les pauses comme dans 待って ou いってらっしゃい (double exemple hehe). Anthy supporte le système Hepburn et Kunrei, ce que signifie vous pouvez écrire tu ou tsu, hu ou fu, si ou shi, etc. Les signes de ponctuation comme "。" ou "、" sont accessible via les mêmes touches que sur clavier AZERTY. Le signe d'allongement pour les Katakana "ー" est le trait d'union "-" . Écrire en Japonais sous Arch Linux Auto-promotion : les GIFs sont faits avec Peek. :P Et voilà, vous savez maintenant comment écrire en japonais sous Arch. Comme vous pouvez le voir, l'installation des polices et du moteur d'entrée ne sont pas compliqués, mais ça ne s'invente pas. Concernant la disposition, celle-ci n'est pas compliquée à prendre en main, et avec un peu de pratique ça devient naturel. En espérant en avoir aidé plus d'un... またね!

L'article Écrire en japonais sous Arch Linux a été publié sur Angristan

Gravatar de Angristan
Original post of Angristan.Votez pour ce billet sur Planet Libre.

Articles similaires

genma : Yunohost - Goaccess - Rapport HTML depuis des logs d'un serveur web

Présentation de GoAcess

GoAccess présente des statistiques en lisant les logs de votre serveur Web, non pas en exécutant du code côté utilisateur.

Site : https://goaccess.io/

GoAccess fonctionne en ligne de commande et présente par défaut ses résultats dans la console, en temps réel. Une série de panels (que l'on peut étendre individuellement) présentent les différents types de données : nombres de visiteurs uniques, URL non trouvées, OS, etc. Classique. Il est également possible de générer une − plutôt jolie − page html

Le site GoAccess : analyse simple et efficace des logs d'un serveur Web - https://hal-9000.fr/?s11R3Q a fait un tutoriel qui montre qu'il est assez simple d'installer et d'utiliser GoAccess.

Autres tutoriels présentant des astuces complémentaires :
-Goaccess : un autre outil de Web Analytics par Denis Szalkowski
-GoAccess – Des logs web en temps réel et en cli

GoAccess répond à mon besoin

J'ai étudié différents systèmes permettant de générer des rapports à partir de logs, je connais un peu ELK (ElasticSearch, LogStash, Kibana), mais ça reste très complexe et un peu usine à gaz pour mon besoin qui est de tout simplement superviser / avoir des rapports issus des logs de mon serveur Yunohost. Donc GoAcess correspond bien à mon besoin.

Par défaut, Yunohost conserve les logs du serveur Nginx un certain temps (il faudra que je regarde en détail la configuration de logrotate), cela convient

Automatisons un peu tout ça...

L'objectif est d'avoir des rapports réguliers en HTML. Pour ça, j'ai mis en place une tâche CROn qui va faire une concatènation des différents fichiers de logs et générer un seul et même rapport HTML via GoAccess qui contient donc une visualisation graphique de l'ensemble des données issues de ces logs. Je peux ensuite m'envoyer le rapport par mail, le récupérer, le mettre à disposition dans un espace dédié du serveur web...

#/bin/bash

# On fait le cat dans /tmp pour que ce soit effacer ensuite
cat /var/log/nginx/blog.genma.fr-access.log* > /tmp/blog.genma.fr-access.full.log
echo "Goacess - Lancement de la generation des rapports HTML"
goaccess --log-format=COMBINED -f /tmp/blog.genma.fr-access.full.log -a -o BlogFullReport.html
# Le fichier BlogFullReport.html contient un beau rapport HTML complet généré par Goaccess.
echo "Goacess - Fini"

Yunohost ?

Yunohost propose la création de coquille vide pour des applications, via les Multi Custom Webapp, une version forkée des Custom Webapp qui permettent d'en créer plusieurs.

J'installe l'application en indiquant comme paramétrage :
- Nom de l'application : GoAccess
- Adresse et chemin : moninstanceyunohost.fr et /goacess comme sous répertoire
- Utilisateur : genma

Ca mouline (il y a la création et modification de la configuration nginx qui se fait) et ensuite j'ai bien une tuile "GoAccess" dans la liste des applications et un dossier "/var/www/webapp_genma/GoAccess" dans lequel j'ai par défaut le fichier "index.html".

Il ne reste qu'à ajouter au script ci-dessus une ligne du type

mv /tmp/BlogFullReport.html /var/www/webapp_genma/GoAccess

et depuis un navigateur web, en étant connecté à Yunohost d'aller sur
https://moninstanceyunohost.org/goacess/BlogFullReport.html

pour avoir le beau rapport généré par GoAccess !

Aller plus loin ?

Il suffit de faire un script un peu plus avancé, de le mettre en tâche planifiée (cron) et de créer par exemple un fichier index.html qui contiendra par exemple une série de liens :
- BlogFullReport_Jour1.html
- BlogFullReport_Jour2.html
- BlogFullReport_Jour3.html
- InstanceFullReport_Jour1.html
- InstanceFullReport_Jour2.html
- InstanceFullReport_Jour3.html

Ici les fichers InstanceFullReport_JourX.html étant généré par une ligne faisant appel à GoAcess mais pour un cumul de logs de fichiers Nginx pour l'instance (cumul des fichiers de log nginx pour monistanceyunohost.fr).

Gravatar de genma
Original post of genma.Votez pour ce billet sur Planet Libre.

Journal du hacker : Liens intéressants Journal du hacker semaine #38

Pour la 38ème semaine de 2017, voici 10 liens intéressants que vous avez peut-être ratés, relayés par le Journal du hacker, votre source d’informations pour le Logiciel Libre francophone !

Pour ne plus rater aucun article de la communauté francophone, voici :

De plus le site web du Journal du hacker est « adaptatif (responsive) ». N’hésitez pas à le consulter depuis votre smartphone ou votre tablette !

Le Journal du hacker fonctionne de manière collaborative, grâce à la participation de ses membres. Rejoignez-nous pour proposer vos contenus à partager avec la communauté du Logiciel Libre francophone et faire connaître vos projets !

Et vous ? Qu’avez-vous pensé de ces articles ? N’hésitez pas à réagir directement dans les commentaires de l’article sur le Journal du hacker ou bien dans les commentaires de ce billet :)

Gravatar de Journal du hacker
Original post of Journal du hacker.Votez pour ce billet sur Planet Libre.

Articles similaires

blog-libre : Mutualisation

En 2015 je parlais de confiance, en 2016 je parlais de faire, en 2017 je souhaite faire confiance.

Depuis 10 jours je n’ai plus de net à la maison, c’est en cours de résolution chez Free. Ça ne me dérange pas particulièrement pour surfer, je fais un partage de connexion à partir de mon téléphone portable. En revanche je m’auto-héberge, j’ai notamment un gros besoin de FreshRSS et Shaarli. Simultanément avec A1 on échange sur les besoins de sauvegarde des particuliers. Foutre ses données chez Microsoft One Drive ou Google Drive, ça fait pas envie niveau vie privée mais c’est gratuit et simple (donc grand public).

Il y a une autre solution, confier ses données à une personne de confiance : un voisin, un pote, quelqu’un de la famille. Décentralisation totale, pair à pair, confiance à hauteur d’homme.

En ce moment je vois moins d’intérêt à m’auto-héberger, c’est sympa pour apprendre mais avec Debian une fois que c’est mis en place, ça juste marche et c’est presque increvable. Je veux aller plus loin, je veux mutualiser. Je cherche quelqu’un pour héberger mes données :

  • J’ai besoin d’un FreshRSS et de Shaarli (PHP, MariaDB). Évidemment ce sera avec des logiciels libres, on partagera probablement des idées communes sur le Libre. Je veux pouvoir récupérer des sauvegardes facilement genre avec curl ou via un partage Syncthing, il me faut également une rétention de minimum 3 jours. Une connexion internet fiable et supérieure à 10 Mbps car si comme moi vous avez une connexion de 1,2 Mbps et des coupures régulières autant que je reste comme actuellement lol
  • Je n’ai aucun problème à être hébergé sur un VPS ou serveur mutualisé chez OVH, Gandi… De même si vous proposez mieux que mes besoins de base comme https, meilleure rétention, fibre, etc. c’est encore plus top !
  • Pour l’instant je ne compte pas payer/participer même à hauteur de quelques euros. Je ne suis pas du tout fermé sur la question, c’est juste que je veux toucher du doigt l’expression rendre service

Pourquoi ne pas faire ça avec A1, avec Laurent ici même, sur le serveur du Jdh avec Carl, avec Max, chez Cyrille ? Parce que justement je souhaite faire confiance, j’ai déjà entièrement confiance en eux, je les connais, ce sont des personnes de qualité. Je veux créer du lien avec d’autres personnes, échanger, partager avec elles. Je veux de l’ouverture, montrer que ce qu’on prône c’est autre chose, de l’humain, donner sa confiance, faire confiance, prendre ses responsabilités, amener des solutions.

Pourquoi ne pas faire ça chez un CHATONS ? Essentiellement parce que je veux rester dans du pair à pair, à hauteur d’homme. S’appeler par son prénom ou son pseudo, se tutoyer, tisser un lien avec celui qui me rend service.

En retour je vous remercierai chaleureusement, j’espère qu’on échangera et qu’on sympathisera mais n’attendez guère plus. Il s’agit de deux personnes qui se font confiance et s’entraident. Je vais surtout compter sur vous, placer des choses précieuses entre vos mains, ma confiance et mes données. C’est un geste anodin mais aussi fort et symbolique, des choses qui n’ont pas de prix mais qui signifient beaucoup.

Puisqu’on parle de mutualisation, de mon côté je peux stocker 1 To de données. Je suis un des rares zozos à avoir un NAS débranché électriquement donc éteint. Ça évite le piratage, le vol de données, la corruption liée à une MAJ foireuse, les surcharges électriques, l’usure des disques. Le seul vrai risque c’est le vol mais le NAS pèse lourd lol. Typiquement vous m’envoyez votre disque dur externe par la poste, je charge les données puis j’éteins le NAS. Je n’ai aucun problème à payer de ma poche les frais de retour. C’est pour faire du cold storage (stocker des données auxquelles vous n’avez pas besoin d’accéder souvent) typiquement des photos/vidéos de famille dont vous voulez être sûr d’avoir un backup ailleurs que chez vous (externalisé) mais auquel vous n’avez pas besoin d’accéder régulièrement. Vous m’envoyez le DD externe tous les 6 mois et voilà. Le but étant de rendre service et de ne pas virer à la multinationale, je ne rends ce service qu’à 2-3 personnes. Je ne vais pas héberger 10 Go de données pour 50 personnes, ça serait ingérable.

Je rappelle que je suis sysadmin, je sais parfaitement héberger mes données et trouver des solutions mais ce n’est pas ce que je souhaite faire. Je souhaite mutualiser nos forces, faire confiance à d’autres personnes, m’appuyer sur leurs moyens et/ou leurs connaissances.

Je vous laisse passer par le formulaire de contact ou laisser un message avec votre « vraie » adresse mail ci-dessous. Mon besoin est assez urgent, merci ;)

Gravatar de blog-libre
Original post of blog-libre.Votez pour ce billet sur Planet Libre.

Bartounet : - DNS MENTEURS - - CENSURE SUR INTERNET -

DNS-MENTEURS

file404120200024


De nos jours tout Internet est basé sur les noms de domaines.

Sans le système DNS quasiment plus rien ne fonctionnerait.

Pour rappel selon Wikipédia:

Le Domain Name System (ou DNS, système de noms de domaine) est un service permettant de traduire un nom de domaine en informations,

notamment en adresses IP .


Autrement dit quand vous tapper sur http://blog.info16.fr, votre machine va tenter de transformer ce nom en Adresse IP.

Grace à cette addresse votre système va pouvoir aller communiquer avec l'adresse IP de mon blog.


La structure et le fonctionnement du DNS


Le système DNS utilise une structure en arbre.

http://www.info16.fr/ftpl/Structure_DNS.jpg

Tout commence depuis les serveurs Racines ( Root ) : Officiellement il y en a 13 ( 13 adresses IP) , mais réèllement il y en a plus

de 130 répartis dans le monde

Les serveurs racines utilisent la technologie réseau unicast ; selon votre localisation, l'adresse IP va être routée vers un serveur

le plus prêt de la requete.


http://www.info16.fr/ftpl/Root-current.svg.png

sources: https://fr.wikipedia.org/wiki/Serveur_racine_du_DNS



Puis les serveur de TLD ( .fr, .com, ...) ou de premier niveau

Puis les serveurs de second niveau

Puis les serveur de troisième niveau

etc ...


Autrement dit une requete récursive vers ce blog donnerait:

1. Quelle est l'adresse IP de blog.info16.fr ?  ( Les serveurs racines voit toujours la requête complète)

2. les serveurs racines répondent la liste des serveurs faisant autorité pour le .FR

3. Le client DNS interroge alors un des serveurs faisant autorité pour .FR en lui demandant "quelle est l'adresse IP de blog.info16.fr"

4. Un des serveurs faisant autorité pour .FR répond la liste des serveurs faisant autorité pour le domaine info16.fr

5. Le client DNS interroge alors un des serveurs faisant autorité pour info16.fr  en lui demandant "qu'elle est l'adresse IP de blog.info16.fr"

6. le serveurs faisant autorité pour .info16.fr répond la ou les adresses IP correspondantes au nom blog.info16.fr

On le voit très bien en utilisant la commande dig + Trace


Le resolveur

Cet enchainement de questions/réponses est ce que fait un résolveur

Le résolveur va de plus mettre en cache les réponses trouvées afin de pouvoir les fournir plus rapidement

la prochaine fois qu'on lui demandera. ( le temps du TTL du DNS)


Cela permet de ne pas de réinterroger tous les racines et les serveurs faisant autorités à chaque fois.

Cela explique que les DNS Racines ne sont pas très chargés car la plupart des requetes clients sont fournies via des résolveurs

qui ont la réponse en cache.

Plus le résolveurs est sollicité plus son cache sera fourni et moins il interrogera les serveurs racines.


http://www.info16.fr/ftpl/dns_resolution.png

Source www.afnic.fr


Il y a donc deux types de serveurs DNS:

  • Les Serveurs faisants autorité ( à différents niveaux)
  • Les resolveurs ( qui connaissent en durs les IP des racines)


Les serveurs faisant autorité ont l'autorité sur un domaine: c'est-à-dire que la réponse ne fait pas appel à un autre serveur ou à un cache

Les resolveurs  sont des serveurs qui vont intérroger les serveurs faisant autorité et mettre en cache les réponses pour les fournir à ses clients.


La plupart des utilisateurs de l'internet on peu ou pas conscience de ce fonctionnement.

L'utilisateur LAMBDA utilise sa box internet fourni par son FAI et navigue sans se poser de question.


La plupart du temps les box internet utilisent les résolveurs du Fournisseur d'accès.

PAr exemple :

Free:

212.27.40.240
212.27.40.241

Orange:
80.10.246.2
80.10.246.1291


SFR:

109.0.66.10
109.0.66.20

Et beaucoup d'autres...

http://www.ariase.com/fr/guides/adresses-dns.html


La censure via les DNS Menteurs

Mais alors mon FAI peut me renvoyer n'importe quelle adresse ? quand j'interroge un domaine ?

http://www.info16.fr/ftpl/censored-1680266_960_720.png

http://www.info16.fr/ftpl/smiley-1958283_960_720.png

OUI mon capitaine.

D'ailleurs si vous suivez l'actualité, des décrets français permettent d'obliger les FAI à bloquer, filtrer des sites internet

Sur décision de justice.

La réponse la plus simple des FAI est d'utiliser le mensonge DNS.


Par exemple cela à été le cas sur des sites de streaming, Torrent, etc ..

T411, Pirate Bay, libertyland, voirfilm ...

Mais aussi des sites islamistes, propagandes, etc ...

http://www.numerama.com/pop-culture/291796-apres-t411-libertyland-streamcomplet-et-voirfilms-se-font-bloquer-en-france.html


Vous allez me dire, oui... c'est pour notre sécurité, et c'est normal de bloquer ce qui est illégal.

On peut le voir comme cela en effet, si vous arrivez à dormir avec cela et que cela ne vous gène pas que

ce qu'on vous affiche à l'écran est ce qu'a décidé votre FAI et votre gouvernement, alors continuez comme cela.

Il faut des moutons :)

http://www.info16.fr/ftpl/face-47810_960_720.png


Pour ma part je milite pour la neutralité du NET depuis longtemps.

La Quadrature du NET en parle beaucoup mieux que moi : https://www.laquadrature.net/fr/neutralite_du_Net


On peut imaginer alors que ces résolveurs peuvent vous mentir à chaque instant et vous

envoyer l'adresse IP qui leur plait.

Pour par exemple:

  • Bloquer des sites
  • Vous envoyer sur des adresses publicitaires
  • Monetiser des sites
  • ...

Plus en détail, bortzmeyer.org. explique que « certains FAI prétendent mettre en place des DNS menteurs pour « le bien des clients »

alors qu'en réalité, ils sont poussés par des intermédiaires qui leur proposent de « monétiser » l'audience du site Web ainsi pointé, comme l'a bien expliqué le directeur technique de Free).


La preuve du mensonge.

http://www.info16.fr/ftpl/stepreuve.png

Vous allez me dire; oui mais comment prouver que mon résolveur me ment ?

En effet, il y a des cas facile et d'autres nons.

Dans certains cas, la résolution d'un nom de domaine par un resolveur menteur aboutit à la réponse 127.0.0.1

qui est votre adresse locale ce qui explique une page blanche ou une erreur dans votre navigateur.

Dans d'autres cas, le DNS va vous renvoyer un code erreur

Dans d'autre le DNS va vous envoyer sur une page de bloquage ou une publicité.



Exemple : Allez avec votre navigateur sur  http://streamcomplet.me/  ( juste pour voir, le téléchargement d'oeuvres protégées est illégales)


Avec mon résolveur:

Pour ma part en utilisant mon propre résolveur ( je vous en parlerait plus loin), le site s'affiche:

D'ailleurs il me redirige vers un autre domaine, car le site essaye déjà de contourner la censure

http://www.info16.fr/ftpl/streamok.png


La résolution DNS donne les adresses IP du FQDN

Moi@linux:~# dig streamcomplet.com +short

104.28.6.68
104.28.7.68

Avec le résolveur de mon FAI

Avec le résolveur de mon FAI ( je vous laisse deviner lequel)

Page blanche.


http://www.info16.fr/ftpl/streamnok.png

La résolution DNS renvoi 127.0.0.1

root@NAS:~# dig streamcomplet.com +short @212.27.40.241
127.0.0.1


La preuve avec les sondes ATLAS:

Il est difficile d'avoir une vue de l'internet depuis n'importe quel endroit du monde.

Qui me dit que l'internet est le même si je navigue depuis La France ou ou depuis l'Allemagne.

Pour cela il existe le projet  RIPE NCC , qui à un réseau de sonde Atlas.


Selon mon grand gourou Stéphane BORTZMEYER

http://www.bortzmeyer.org

Le réseau des sondes Atlas, créé et géré par le RIPE-NCC, couvre l'Europe (et au delà) de petites machines connectées à l'internet et qui effectuent en permanence des mesuresdiverses, qui servent par exemple de base aux très intéressants articles des RIPE Labs. Cela permet par exemple de détecter une bogue présente dans beaucoup de routeurs. Les Atlas ne savaient faire au début que des mesures commandées par le RIPE-NCC. Depuis quelque temps, les utilisateurspeuvent également commander des mesures selon leur goût, un système connu sous le nom d'UDM, User-Defined Measurements.


Ces petites sondes, tout le monde peut faire la demande d'en héberger et de la brancher sur sa connection internet.

Si RIPE NCC accepte votre demande vous recevrez votre petite sonde, qui contribuera à sonder la qualité de l'internet.


http://www.info16.fr/ftpl/201405_sonde_ripe_atlas_1.jpg


Héberger cette sonde vous permet de gagner des crédits chez https://atlas.ripe.net/

Ces crédit vous permettent de lancer des mesures internet depuis le site mais aussi depuis leurs APIs

Des scripts disponibles sur Github vous permettent d'utiliser ces API:

https://github.com/RIPE-Atlas-Community/ripe-atlas-community-contrib


J'ai la chance d'héberger une sonde, et donc de pouvoir faire ces mesures.

Parmis ces mesures on peut mesurer les DNS.


Reprenons l'éxemple de streamcomplet.com

En FRANCE

Nous allons utiliser le script atlas-resolve


% atlas-resolve --country FR --requested 100 streamcomplet.com [ERROR: SERVFAIL] : 10 occurrences [104.28.6.68 104.28.7.68] : 47 occurrences [ERROR: NXDOMAIN] : 7 occurrences [127.0.0.1] : 35 occurrences [TIMEOUT(S)] : 1 occurrences Test #9327211 done at 2017-09-23T10:15:02Z


on lui demande, "résoud moi streamcomplet.com, depuis 100 sondes ATLAS  hébergées en FRANCE"

On obtient:

47 bonnes réponse sur 100 requetes ...

Ce domaine est donc en partie "censuré" en France


En ALLEMAGNE

Nous allons utiliser le script atlas-resolve

% atlas-resolve --country DE --requested 100 streamcomplet.com [104.28.6.68 104.28.7.68] : 100 occurrences Test #9327213 done at 2017-09-23T10:16:08Z

on lui demande, "résoud moi streamcomplet.com, depuis 100 sondes ATLAS  hébergées en FRANCE"

On obtient:

100 bonnes réponse sur 100 requetes !!!

Ce domaine ne subit pas de censure en Allemagne.

Mais alors !! Qu'est ce que je dois faire ??


http://www.info16.fr/ftpl/deep-thought-1296377_960_720.png


Les Resolveurs publics

Si vous vous interessez un peu à la question, les premières réponses qu'on trouve

sur le NET c'est:

Les DNS de ton FAI ce sont des menteurs, utilise les DNS de Google ; les fameux 8.8... !!! Eux ils te respectent

D'autres te diront Utilise ceux de Open DNS c'est les meilleurs et ils sont OPEN

D'autres réponses un peu moin bêtes vous recommande des Résolveurs associatif qui revendiquent la liberte du NET


Tout cela se discute sur plusieurs points:

Google --> Vous êtes sérieux ? certes ils ne sont pas connus pour mentir, mais encore cela peu changer

Mais vous vous doutez bien que c'est vous le produit, et que vos requetes seront utilisées d'une manière ou d'une autre.

Ceci dit vous utilisez surement leur moteur de recherche . ils savent dejà tout de vous.

Du moment que vous en êtes conscient ...


OpenDNS --> Cela pourrait paraitre une bonne idée à première vue, mais leurs intentions ne sont pas différentes

de celle de Google.

Ils vont même a vous ajouter de la Pub, quand le FQDN n'existe pas.

Tout cela est réglable dans leur interface, mais ma confiance en eux est toute relative.

NB; L'utilisation de OPEN DNS en tant que filtrage parentale peut apporter une solution à mondre cout

Si on est conscient du risque pourquoi pas.


Les DNS Associatifs et les autres  --> Certains DNS associatifs s'engagent sur la pureté des résolutions de nom (pas de censure...etc.)

comme les DNS proposés par FDN : 80.67.169.12 et 80.67.169.40.

pourquoi pas, ce serait le moins pire.

Mais encore une fois nous ne savons pas à 100% qu'ils respecteront leurs engagements,et si les resolveurs ne disparaitront pas du jour au lendemain


Il faut aussi voir le coté performance.

En règle général les resolveurs de vos FAI seront les plus rapides ( mais pas toujours)

Ils sont sur le même réseau que vous et sont donc censé etre plus performants.

Si vou ssouhaitez utiliser des résolveurs ouverts publics n'hésitez pas à tester leur temps de réponses avec dig par exemple

;; Query time: 59 msec
;; SERVER: 212.27.40.241#53(212.27.40.241)
;; WHEN: Sat Sep 23 14:54:36 CEST 2017
;; MSG SIZE  rcvd: 138


Avoir son propre résolveur.

http://www.info16.fr/ftpl/deoxyribonucleic-acid-1500068_960_720.jpg


J'en suis arrivé à la conclusion, que la moins pire des solutions est

d'utiliser son propre resolveur

Cela demande un peu ( très peu) de travail, mais c'est le seul moyen d'éviter les problèmes de DNS Menteur et

d'exploitation de vos requetes DNS

Le tout en gardant une meilleure performance.


Il y a plusieurs outils qui vous permettent de monter votre résolveur

Les plus connus : Unbound et BIND

Unbound est pas mal car beaucoup plus léger que BIND.

https://www.unbound.net/


Je ne vais pas écrire d'article sur comment monter un résolveur; Il y en a plein sur le NET.

Ce résolveur va lui même réaliser les requetes récursive depuis les racines et les mettre en cache

PAr conséquent, pas de censure, et vous maitrisez vos requetes DNS

de plus la performance est au rendez vous, puisque si votre resolveurs est local, la réponse

en cache sera quasi instantanée


Exemple d'une requete depuis un de mes postes clients, qui utilise mon resolveur local unbound


Premiere requete elle n'est pas en cache --> 176ms

Moi@NAS:~# dig www.info16.fr

;; QUESTION SECTION:
;www.info16.fr.                 IN      A

;; ANSWER SECTION:
www.info16.fr.          3600    IN      A       212.129.3.40

;; AUTHORITY SECTION:
info16.fr.              10800   IN      NS      b.dns.gandi.net.
info16.fr.              10800   IN      NS      c.dns.gandi.net.
info16.fr.              10800   IN      NS      a.dns.gandi.net.

;; Query time: 176 msec
;; SERVER: 10.0.0.254#53(10.0.0.254)
;; WHEN: Sat Sep 23 15:06:31 CEST 2017
;; MSG SIZE  rcvd: 119

On relance la même requetes --> Elle est instantanée 0ms

Moi@NAS:~# dig www.info16.fr

;; QUESTION SECTION:
;www.info16.fr.                 IN      A

;; ANSWER SECTION:
www.info16.fr.          3592    IN      A       212.129.3.40

;; AUTHORITY SECTION:
info16.fr.              10792   IN      NS      b.dns.gandi.net.
info16.fr.              10792   IN      NS      c.dns.gandi.net.
info16.fr.              10792   IN      NS      a.dns.gandi.net.

;; Query time: 0 msec
;; SERVER: 10.0.0.254#53(10.0.0.254)
;; WHEN: Sat Sep 23 15:06:39 CEST 2017
;; MSG SIZE  rcvd: 119


Il existe tout de même des inconvénients non négligeables.

Vous ne bénéficier pas de l'énorme cache du résolveur de votre FAI

Sur l'ensemble des requetes de tous ses clients, le cache emmagazine les informations et les fournis

sans faire de requetes récursive.


Vous solliciterez plus les serveurs racines et contribuerez à leur montée en charge.


Mais a mon avis cela reste la meilleures solution à l'heure actuelle.


Pour finir, c'est vrai que monter son resolveur, n'est pas toujours évident.

Surtout pour le grand public ( les entreprises c'est plus facile, elles bénéficient déjà d'infrastructures serveurs))

Avoir un petit serveur qui tourne dans un coin, ou un vrai serveur dédié demande de l'investissement et du temps


Pour ma part j'ai trouvé le compromis qui me convient : Cela est intégré dans mon routeur.

J'utilise ma Box en mode Bridge, ce qui me permet de mettre un vrai routeur / Firewall en frontal de ma connexion.

Pour cela j'utilise le magnifique PFSENSE que j'ai monté dans un petit boitier ALIX:

https://www.3cx.com/wp-content/uploads/2014/05/image02.png

http://blog.info16.fr/index.php?article62/remplacement-d-une-box-adsl-ovh-par-un-routeur-firewall-pfsense


Dans PFSENSE, le choix de faire un DNS Forwarder ou Resolver est possible: ( d'ailleurs PFSense utilise Unbound)



http://www.info16.fr/ftpl/2017-09-23%2015_19_06-pfSense.localdomain%20-%20Services_%20DNS%20Resolver.png







Gravatar de Bartounet
Original post of Bartounet.Votez pour ce billet sur Planet Libre.

Articles similaires

Marthym : Hello OSGi World, Part 5, Fragment Bundles

Disons que cette partie est un bonus si vous n’avez pas encore saturé ! Depuis le vous devez bien avoir remarqué que l’on utilise log4j 2 et que les logs ne s’affichent pas. À la place on a un message d’erreur qui dit qu’il manque un fichier de configuration. Et malheureusement, l’ajouter dans le répertoire de conf ne suffit pas, ni dans le répertoire courant. Il doit se trouver dans le classpath de log4j2-core.

Fragment Bundle

Le problème est là, l’isolation des classpaths induite par OSGi interdit donc de rajouter un fichier dans le classpath d’un bundle. À moins de modifier le jar original de log4j, ce qui n’est pas vraiment génial.

C’est là qu’interviennent les Fragments Bundles. En effet, ce sont des genres d’ajout fait à des bundles existant. Les fichiers qu’ils contiennent vont être ajouté au bundle qui les abrite et vont donc partager le même classpath.

Création du module how-log4j2

Pour créer un Fragment Bundle, il faut ajouter dans le MANIFEST.MF la ligne :

Fragment-Host: org.apache.logging.log4j.core

Pour dire que le fragment est hébergé par log4j2-core.

Dans la configuration du maven-bundle-plugin on a précisé

combine.children="append"> <_include>-src/main/osgi/osgi.bnd

Cette configuration permet, via un fichier src/main/osgi/osgi.bnd, d’ajouter des instructions à BND. On ajoute le module how-log4j2 avec le fichier osgi.bnd contenant la ligne nécessaire. Et on ajoute au module le ficher de configuration log4j2.

On build et on re-teste :

START LEVEL 1 ID|State |Level|Name 16|Resolved | 1|how-log4j2 (1.0.0.SNAPSHOT)|1.0.0.SNAPSHOT

Dans la liste des bundle on voit le nouveau Fragment. Les Fragments s’activent par l’intermédiaire de leur hôte. C’est pour cela qu’il est noté Resolved au lieu de Active.

Les logs s’affichent maintenant correctement !

Conclusion

Si vous êtes arrivé là, merci de votre patience et indulgence. N’hésitez pas à me faire un retour dans les commentaires !

J’utilise OSGi depuis 4 ans sur un projet conséquent en production. Quand on a commencé, on a essuyé les mêmes plâtres que décrit dans ces articles et même plus ! Au final le projet fonctionne bien mais la maintenance en est souvent complexe. Nous n’avons pas abordé la question des tests mais c’est tout aussi compliqué. En outre, les ressources que ce soit documentation ou humaines sont difficiles à trouver. La multitude d’implémentations de chaque partie du framework crée en plus une fragmentation qui amplifie encore le phénomène. De plus, vous avez du le voir, malgré l’ajout de la dépendance Xnio dans le composant http-server il arrive que l’erreur XNIO se produise. C’est une question de timing. Pour la résoudre définitivement, en plus de demander à Felix de vider son cache sur chaque démarrage, il faut ajouter un niveau de chargement des bundles. Un répertoire core qui serait chargé avant application et qui contiendrait tout sauf les jars de notre application. Mais on constate que la gestion de l’ordre de chargement est aussi un élément compliqué d’OSGi qui vient s’ajouter aux autres.

Pour ces raisons, je ne choisirais pas d’utiliser OSGi en production sur les prochains projets. C’est un sujet intéressant à explorer mais le coût en est très élevé comparé au gain qu’on en retire.

Code source: Part 5, Fragment Bundles

Hello OSGi World, Part 5, Fragment Bundles écrit à l'origine par Marthym pour J'ai acheté un PC neuf cassé ... le September 23, 2017.

Gravatar de Marthym
Original post of Marthym.Votez pour ce billet sur Planet Libre.

®om : Gnirehtet réécrit en Rust

Il y a quelques mois, j’ai présenté Gnirehtet, un outil de reverse tethering pour Android que j’ai écrit en Java.

Depuis, je l’ai réécrit en Rust.

Et il est également open source ! Téléchargez-le, branchez un téléphone ou une tablette Android, et exécutez :

./gnirehtet run

(adb doit être installé)

Pourquoi Rust?

À Genymobile, nous voulions que Gnirehtet ne nécessite pas d’environnement d’exécution Java (JRE), donc le besoin principal était de compiler l’application vers un binaire exécutable natif.

Par conséquent, j’ai d’abord pensé la réécrire en C ou C++. Mais à ce moment-là (début mai), apprendre Rust m’intéressait, après avoir vaguement entendu parler de ses fonctionnalités:

Cependant, je n’avais jamais écrit une ligne de Rust ni entendu parler de son système de possession, d’emprunt ou de durées de vie.

Mais je suis convaincu que le meilleur moyen d’apprendre un langage de programmation est de travailler à plein temps sur un projet dans ce langage.

J’étais motivé, donc après avoir vérifié que ça pouvait convenir (en gros, j’ai écrit un exemple utilisant la bibliothèque d’I/O asynchrone mio, et je l’ai exécuté à la fois sur Linux et Windows), j’ai décidé de réécrire Gnirehtet en Rust.

Apprendre Rust

Pendant la réécriture, j’ai dévoré successivement le Rust book, Rust by example et le Rustonomicon. J’ai beaucoup appris, et j’aime énormément ce langage. Beaucoup de ses fonctionnalités me manquent maintenant quand je travaille sur un projet C++ :

À propos de l’apprentissage, Paul Graham a écrit:

Reading and experience train your model of the world. And even if you forget the experience or what you read, its effect on your model of the world persists. Your mind is like a compiled program you’ve lost the source of. It works, but you don’t know why.

Pour les non-anglophones, ma propre traduction :

La lecture et l’expérience entraînent votre modèle du monde. Et même si vous oubliez l’expérience ou ce que vous avez lu, son effet sur votre modèle du monde persiste. Votre esprit est comme un programme compilé dont vous auriez perdu le code source. Ça fonctionne, mais vous ne savez pas pourquoi.

Certains des concepts de Rust (comme les durées de vie ou la sémantique de mouvement par défaut) m’ont fourni un jeu de données significativement différent, qui a sans aucun doute affecté mon modèle du monde (de la programmation).

Je ne vais pas présenter toutes ces fonctionnaliés (cliquez sur les liens de la documentation si ça vous intéresse). À la place, je vais essayer d’expliquer où et pourquoi Rust a resisté au design que je voulais implémenter, et comment repenser les problèmes dans le périmètre des contraintes de Rust.

La partie suivant nécessite une certaine connaissance de Rust. Vous pourriez vouloir la passer pour aller directement aux stats.

Difficultés

Je trouvais la conception de l’application Java plutôt réussie, donc je voulais reproduire l’architecture globale dans la version Rust (avec d’éventuelles adaptations pour la rustifier).

Mais j’ai lutté sur les détails, en particulier pour satisfaire le borrow checker. Les règles sont simples:

First, any borrow must last for a scope no greater than that of the owner. Second, you may have one or the other of these two kinds of borrows, but not both at the same time:

  • one or more references (&T) to a resource,
  • exactly one mutable reference (&mut T).

En français :

Premièrement, aucun emprunt ne doit avoir une portée plus grande que celle de son propriétaire. Deuxièmement, vous pouvez avoir l’un ou l’autre de ces types d’emprunts, mais pas les deux à la fois:

  • une ou plusieurs références (&T) vers une ressource,
  • exactement une référence mutable (&mut T).

Cependant, il m’a fallu un peu de temps pour réaliser comment elles entrent en conflit avec certains principes ou modèles de conception.

Voici donc mes retours. J’ai sélectionné 4 sujets qui sont suffisamment généraux pour être indépendants de ce projet particulier :

Encapsulation

Les règles d’emprunt contraignent l’encapsulation. C’est la première conséquence que j’ai réalisée.

Voici un exemple canonique :

pub struct Data { header: [u8; 4], payload: [u8; 20], } impl Data { pub fn new() -> Self { Self { header: [0; 4], payload: [0; 20], } } pub fn header(&mut self) -> &mut [u8] { &mut self.header } pub fn payload(&mut self) -> &mut [u8] { &mut self.payload } } fn main() { let mut data = Data::new(); let header = data.header(); let payload = data.payload(); }

Nous créons juste une nouvelle instance de Data, puis associons à des variables locales des références mutables vers les tableaux header et payload, en passant par des accesseurs.

Cependant, cela ne compile pas :

$ rustc sample.rs error[E0499]: cannot borrow `data` as mutable more than once at a time --> sample.rs:21:19 | 25 | let header = data.header(); | ---- first mutable borrow occurs here 26 | let payload = data.payload(); | ^^^^ second mutable borrow occurs here 27 | } | - first borrow ends here

Le compilateur ne peut pas faire l’hypothèse que header() et payload() retournent des références vers des données disjointes dans la structure Data. Par conséquent, chacun emprunte la structure data entièrement. Vu que les règles d’emprunt interdisent d’obtenir deux références mutables vers la même ressource, il rejette le second appel.

Parfois, nous faisons face à des limitations temporaires parce que le compilateur n’est pas (encore) assez malin. Ce n’est pas le cas ici : l’implémentation de header() pourrait très bien retourner une référence vers payload, ou écrire dans le tableau payload, enfreignant ainsi les règles d’emprunt. Et la validité d’un appel d’une méthode ne peut pas dépendre de l’implementation de la méthode.

Pour corriger le problème, le compilateur doit être capable de savoir que les variables locales header et payload référencent des données disjointes, par exemple en accédant aux champs directement :

let header = &mut data.header; let payload = &mut data.payload;

ou en exposant une méthode fournissant les deux références simultanément :

struct Data { fn header_and_payload(&mut self) -> (&mut [u8], &mut [u8]) { (&mut self.header, &mut self.payload) } } fn main() { let mut data = Data::new(); let (header, payload) = data.header_and_payload(); }

De même, dans l’implémentation d’une structure, les règles d’emprunt empêchent de factoriser du code dans une méthode privée facilement. Prenons cet exemple (artificiel) :

pub struct Data { buf: [u8; 20], prefix_length: usize, sum: u32, port: u16, } impl Data { pub fn update_sum(&mut self) { let content = &self.buf[self.prefix_length..]; self.sum = content.iter().cloned().map(u32::from).sum(); } pub fn update_port(&mut self) { let content = &self.buf[self.prefix_length..]; self.port = (content[2] as u16) << 8 | content[3] as u16; } }

Ici, le champ buf est un tableau stockant un préfixe et un contenu de manière contiguë.

Nous voulons factoriser la manière dont nous récupérons la slice content, pour que les méthodes update_*() n’aient pas à se préoccuper des détails. Essayons :

impl Data { pub fn update_sum(&mut self) { - let content = &self.buf[self.prefix_length..]; + let content = self.content(); self.sum = content.iter().cloned().map(u32::from).sum(); } pub fn update_port(&mut self) { - let content = &self.buf[self.prefix_length..]; + let content = self.content(); self.port = (content[2] as u16) << 8 | content[3] as u16; } + + fn content(&mut self) -> &[u8] { + &self.buf[self.prefix_length..] + } }

Malheureusement, cela ne compile pas :

error[E0506]: cannot assign to `self.sum` because it is borrowed --> facto2.rs:11:9 | 10 | let content = self.content(); | ---- borrow of `self.sum` occurs here 11 | self.sum = content.iter().cloned().map(u32::from).sum(); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `self.sum` occurs here error[E0506]: cannot assign to `self.port` because it is borrowed --> facto2.rs:16:9 | 15 | let content = self.content(); | ---- borrow of `self.port` occurs here 16 | self.port = (content[2] as u16) << 8 & content[3] as u16; |

Comme dans l’exemple précédent, récupérer une référence à travers une méthode emprunte la structure complète (ici, self).

Pour contourner le problème, nous pouvons expliquer au compilateur que les champs sont disjoints :

impl Data { pub fn update_sum(&mut self) { let content = Self::content(&self.buf, self.prefix_length); self.sum = content.iter().cloned().map(u32::from).sum(); } pub fn update_port(&mut self) { let content = Self::content(&self.buf, self.prefix_length); self.port = (content[2] as u16) << 8 | content[3] as u16; } fn content(buf: &[u8], prefix_length: usize) -> &[u8] { &buf[prefix_length..] } }

Ça compile, mais cela va totalement à l’encontre de la factorisation : l’appelant doit fournir les champs nécessaires.

Comme alternative, nous pouvons utiliser une macro pour inliner le code :

macro_rules! content { ($self:ident) => { &$self.buf[$self.prefix_length..] } } impl Data { pub fn update_sum(&mut self) { let content = content!(self); self.sum = content.iter().cloned().map(u32::from).sum(); } pub fn update_port(&mut self) { let content = content!(self); self.port = (content[2] as u16) << 8 | content[3] as u16; } }

Mais c’est loin d’être idéal.

Je pense que nous devons juste l’accepter : l’encapsulation entre parfois en conflit avec les règles d’emprunt. Après tout, ce n’est pas si surprenant : imposer les règles d’emprunt nécessite de suivre chaque accès concret aux ressources, alors que l’encapsulation vise à les abstraire.

Observateur

Le design pattern observateur est utile pour enregistrer des événements sur un objet.

Dans certains cas, ce pattern pose des difficultés d’implémentation en Rust.

Pour faire simple, considérons que les événements sont des valeurs u32. Voici une implémentation possible :

pub trait EventListener { fn on_event(&self, event: u32); } pub struct Notifier { listeners: Vec<Box<EventListener>>, } impl Notifier { pub fn new() -> Self { Self { listeners: Vec::new() } } pub fn register<T: EventListener + 'static>(&mut self, listener: T) { self.listeners.push(Box::new(listener)); } pub fn notify(&self, event: u32) { for listener in &self.listeners { listener.on_event(event); } } }

Par commodité, implémentons notre trait EventListener pour les closures :

impl<F: Fn(u32)> EventListener for F { fn on_event(&self, event: u32) { self(event); } }

Ainsi, son utilisation est simple :

let mut notifier = Notifier::new(); notifier.register(|event| println!("received [{}]", event)); println!("notifying..."); notifier.notify(42);

Cela affiche :

notifying... received [42]

Jusqu’ici, tout va bien.

Cependant, les choses se compliquent si nous voulons modifier un état sur la réception d’un événement. Par exemple, implémentons une structure pour stocker tous les événements reçus :

pub struct Storage { events: Vec<u32>, } impl Storage { pub fn new() -> Self { Self { events: Vec::new() } } pub fn store(&mut self, value: u32) { self.events.push(value); } pub fn events(&self) -> &Vec<u32> { &self.events } }

Pour pouvoir remplir ce Storage sur chaque événement reçu, nous devons d’une manière ou d’une autre le passer avec l’event listener, qui sera stocké dans le Notifier. Par conséquent, nous avons besoin qu’une instance de Storage soit partagée entre le code appelant et le Notifier.

Avoir deux références mutables vers le même objet enfreint évidemment les règles d’emprunt, donc nous avons besoin d’un pointeur à compteur de références.

Cependant, un tel pointeur est en lecture seul, donc nous avons également besoin d’un RefCell pour la mutabilité intérieure.

Ainsi, nous allons utiliser une instance de Rc>. Cela peut sembler trop verbeux, mais utiliser Rc> (ou Arc> pour la thread-safety) est très courant en Rust. Et il y a pire.

Voici ce que donne le code client :

use std::cell::RefCell; use std::rc::Rc; let mut notifier = Notifier::new(); // first Rc to the Storage let rc = Rc::new(RefCell::new(Storage::new())); // second Rc to the Storage let rc2 = rc.clone(); // register the listener saving all the received events to the Storage notifier.register(move |event| rc2.borrow_mut().store(event)); notifier.notify(3); notifier.notify(141); notifier.notify(59); assert_eq!(&vec![3, 141, 59], rc.borrow().events());

De cette manière, le Storage est correctement modifié à partir de l’event listener.

Tout n’est pas résolu pour autant. Dans cet exemple, c’était facile, nous avions accès à l’instance Rc>. Comment faire si nous avons seulement accès au Storage, par exemple si nous voulons que le Storage s’enregistre lui-même à partir de l’une de ses méthodes, sans que l’appelant n’ait à fournir l’instance Rc> ?

impl Storage { pub fn register_to(&self, notifier: &mut Notifier) { notifier.register(move |event| { /* how to retrieve a &mut Storage from here? */ }); } }

Nous devons trouver un moyen de récupérer le Rc> à partir du Storage.

Pour cela, l’idée consiste à rendre Storage conscient de son pointeur à compteur de références. Bien sûr, cela n’a du sens que si Storage est construit dans un Rc>.

C’est exactement ce que enable_shared_from_this fournit en C++, donc nous pouvons nous inspirer de son fonctionnement : juste stocker un Weak>, downgradé à partir du Rc>, dans la structure elle-même. De cette manière, nous pouvons l’utiliser pour récupérer une référence &mut Storage à partir de l’event listener :

use std::rc::{Rc, Weak}; use std::cell::RefCell; pub struct Storage { self_weak: Weak<RefCell<Storage>>, events: Vec<u32>, } impl Storage { pub fn new() -> Rc<RefCell<Self>> { let rc = Rc::new(RefCell::new(Self { self_weak: Weak::new(), // initialize empty events: Vec::new(), })); // set self_weak once we get the Rc instance rc.borrow_mut().self_weak = Rc::downgrade(&rc); rc } pub fn register_to(&self, notifier: &mut Notifier) { let rc = self.self_weak.upgrade().unwrap(); notifier.register(move |event| rc.borrow_mut().store(event)) } }

Voici comment l’utiliser :

let mut notifier = Notifier::new(); let rc = Storage::new(); rc.borrow().register_to(&mut notifier); notifier.notify(3); notifier.notify(141); notifier.notify(59); assert_eq!(&vec![3, 141, 59], rc.borrow().events());

Il est donc possible d’implémenter le design pattern observateur en Rust, mais c’est un peu plus difficile qu’en Java ;-)

Lorsque c’est possible, il est probablement préférable de l’éviter.

Partage de données mutables

Mutable references cannot be aliased.

En français :

Les références mutables ne peuvent pas être aliasées.

Comment partager des données mutables, alors ?

Nous avons vu que nous pouvions utiliser Rc> (ou Arc>), qui impose les règles d’emprunt à l’exécution. Cependant, ce n’est pas toujours désirable :

  • cela force une nouvelle allocation sur le tas,
  • chaque accès a un coût à l’exécution,
  • l’emprunt concerne toujours la ressource entière.

Au lieu de cela, nous pourrions utiliser des pointeurs bruts manuellement dans du code non-sûr, mais alors ce serait non-sûr.

Et il y a une autre solution, qui consiste à exposer des vues temporaires d’emprunt d’un objet. Laissez-moi expliquer.

Dans Gnirehtet, un paquet contient une référence vers les données brutes (stockées dans un buffer quelque part) ainsi que les valeur des champs des en-têtes IP et TCP/UDP (parsées à partir du tableau d’octets brut). Nous aurions pu utiliser une structure à plat pour tout stocker :

pub struct Packet<'a> { raw: &'a mut [u8], ipv4_source: u32, ipv4_destination: u32, ipv4_protocol: u8, // + other ipv4 fields transport_source: u16, transport_destination: u16, // + other transport fields }

Le Packet aurait fourni des setters pour tous les champs d’en-têtes (modifiant à la fois les champs du paquet et le tableau d’octets). Par exemple :

impl<'a> Packet<'a> { pub fn set_transport_source(&mut self, transport_source: u16) { self.transport_source = transport_source; let transport = &mut self.raw[20..]; BigEndian::write_u16(&mut transport[0..2], port); } }

Mais cette conception ne serait pas terrible (surtout que les champs d’en-têtes TCP et UDP sont différents).

À la place, nous voudrions extraire les en-têtes d’IP et de transport vers des structures séparées, gérant leur propre partie du tableau d’octets :

// violates the borrowing rules pub struct Packet<'a> { raw: &'a mut [u8], // the whole packet (including headers) ipv4_header: Ipv4Header<'a>, transport_header: TransportHeader<'a>, } pub struct Ipv4Header<'a> { raw: &'a mut [u8], // slice related to ipv4 headers source: u32, destination: u32, protocol: u8, // + other ipv4 fields } pub struct TransportHeader<'a> { raw: &'a mut [u8], // slice related to transport headers source: u16, destination: u16, // + other transport fields }

Vous avez immédiatement repéré le problème : il y a plusieurs références vers la même ressource, le tableau d’octets raw, en même temps.

Remarquez que diviser le tableau n’est pas une possibilité ici, vu que les slices de raw se chevauchent : nous avons besoin d’écrire le paquet complet en une seule fois vers la couche réseau, donc le tableau raw dans Packet doit inclure les headers.

Nous avons besoin d’une solution compatible avec les règles d’emprunt.

Voici celle à laquelle je suis parvenu :

  • stocker les données des en-têtes séparément, sans les slices de raw,
  • créer des structures de vues pour les en-têtes d’IP et de transport, liées à une durée de vie,
  • exposer des méthodes de Packet retournant des instances de vues.

Et voici une simplification de l’implémentation réelle :

pub struct Packet<'a> { raw: &'a mut [u8], ipv4_header: Ipv4HeaderData, transport_header: TransportHeaderData, } pub struct Ipv4HeaderData { source: u32, destination: u32, protocol: u8, // + other ipv4 fields } pub struct TransportHeaderData { source: u16, destination: u16, // + other transport fields } pub struct Ipv4Header<'a> { raw: &'a mut [u8], data: &'a mut Ipv4HeaderData, } pub struct TransportHeader<'a> { raw: &'a mut [u8], data: &'a mut TransportHeaderData, } impl<'a> Packet<'a> { pub fn ipv4_header(&mut self) -> Ipv4Header { Ipv4Header { raw: &mut self.raw[..20], data: &mut self.ipv4_header, } } pub fn transport_header(&mut self) -> TransportHeader { TransportHeader { raw: &mut self.raw[20..40], data: &mut self.transport_header, } } }

Les setters sont implémentés sur les vues, où ils détiennent une référence mutable vers le tableau brut :

impl<'a> TransportHeader<'a> { pub fn set_source(&mut self, source: u16) { self.data.source = source; BigEndian::write_u16(&mut raw[0..2], source); } pub fn set_destination(&mut self, destination: u16) { self.data.destination = destination; BigEndian::write_u16(&mut raw[2..4], destination); } }

De cette manière, les règles d’emprunt sont respectées, et l’API est élégante :

let mut packet = …; // "transport_header" borrows "packet" during its scope let mut transport_header = packet.transport_header(); transport_header.set_source(1234); transport_header.set_destination(1234);Limitations du compilateur

Rust est un langage jeune, et le compilateur a quelques problèmes ennuyeux.

Le pire, d’après moi, est lié aux durées de vie non-lexicales, qui provoque des erreurs inattendues :

struct Container { vec: Vec<i32>, } impl Container { fn find(&mut self, v: i32) -> Option<&mut i32> { None // we don't care the implementation } fn get(&mut self, v: i32) -> &mut i32 { if let Some(x) = self.find(v) { return x; } self.vec.push(v); self.vec.last_mut().unwrap() } }error[E0499]: cannot borrow `self.vec` as mutable more than once at a time --> sample.rs:14:9 | 11 | if let Some(x) = self.find(v) { | ---- first mutable borrow occurs here ... 14 | self.vec.push(v); | ^^^^^^^^ second mutable borrow occurs here 15 | self.vec.last_mut().unwrap() 16 | } | - first borrow ends here

Heureusement, cela devrait être corrigé prochainement.

La fonctionnalité d’Impl Trait, permettant aux fonctions de retourner des types abstraits non-boxés, devrait aussi améliorer l’expérience (il y a aussi une proposition étendue).

Le compilateur produit généralement des messages d’erreur très utiles. Mais quand ce n’est pas le cas, ils peuvent être très déroutants.

Sûreté et pièges

Le premier chapitre du Rustonomicon dit :

Safe Rust is For Reals Totally Safe.

[…]

Safe Rust is the true Rust programming language. If all you do is write Safe Rust, you will never have to worry about type-safety or memory-safety. You will never endure a null or dangling pointer, or any of that Undefined Behavior nonsense.

En français :

La partie Sûre de Rust est Réellement Totallement Sûre.

[…]

Le Rust Sûr est le vrai langage de programmation Rust. Si vous n’écrivez que du Rust Sûr, vous n’aurez jamais à vous inquiétez de la sûreté des types ou de la mémoire. Vous n’aurez jamais à supporter un pointeur null ou dangling, ou l’un de ces comportements indéfinis insensés.

C’est le but. Et c’est presque vrai.

Leakpocalypse

Dans le passé, il a été possible d’écrire du code Rust sûr accédant à de la mémoire libérée.

Cette “leakpocalypse” a conduit à la clarification des guaranties de sûreté : ne pas exécuter un destructeur est maintenant considéré sûr. En d’autres termes, la sûreté mémoire ne peut plus reposer sur RAII (en fait, elle n’a jamais pu, mais cela n’a été remarqué que tardivement).

En conséquence, std::mem::forget est maintenant sûr, et JoinGuard a été déprécié et supprimé de la bibliothèque standard (il a été déplacé vers un crate séparé).

Les autres outils s’appuyant sur RAII (comme Vec::drain()) doivent prendre des précautions particulières pour garantir que la mémoire ne sera pas corrompue.

Ouf, la sûreté mémoire est (maintenant) sauvée.

Infinité indéfinie

En C et C++, les boucles infinies sans effets de bords sont un cas d’undefined behavior. À cause de cela, il est possible d’écrire des programmes qui, de façon inattendue, réfutent le dernier théorème de Fermat.

En pratique, le compilateur Rust s’appuie sur LLVM, qui (actuellement) applique ses optimisations en faisant l’hypothèse que les boucles infinies sans effets de bords ont un comportement indéfini. En conséquence, de tels undefined behaviors se produisent également en Rust.

Voici un exemple minimal pour l’observer :

fn infinite() { loop {} } fn main() { infinite(); }

Quand on l’exécute sans optimisations, il se comporte comme “attendu” :

$ rustc ub.rs && ./ub ^C (infinite loop, interrupt it)

Mais activer les optimisations fait paniquer le programme :

$ rustc -O ub.rs && ./ub thread 'main' panicked at 'assertion failed: c.borrow().is_none()', /checkout/src/libstd/sys_common/thread_info.rs:51 note: Run with `RUST_BACKTRACE=1` for a backtrace.

Nous pouvons aussi produire des résultats inattendus sans plantage :

fn infinite(mut value: u32) { // infinite loop unless value initially equals 0 while value != 0 { if value != 1 { value -= 1; } } } fn main() { infinite(42); println!("end"); }$ rustc ub.rs && ./ub ^C (infinite loop, interrupt it)

Mais avec optimisations :

$ rustc -O ub.rs && ./ub end

C’est un cas particulier, qui sera probablement corrigé dans le futur. En pratique, les garanties de sûreté de Rust sont très fortes (au prix d’être contraignantes).

Stats

C’est tout pour mes retours sur le langage lui-même.

En supplément, comparons les versions Java et Rust du serveur relais.

Nombre de lignes $ cloc relay-{java,rust}/src ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Rust 29 687 655 4506 Java 37 726 701 2931 -------------------------------------------------------------------------------

(tests included)

Le projet Rust est significativement plus gros, pour plusieurs raisons :

  • il y a beaucoup de classes de vues d’emprunt ;
  • la version Rust définit sa propre classe de selecteur d’I/O asynchrone, encapsulant Poll de plus bas niveau, alors que la version Java utilise le Selector standard ;
  • la gestion d’erreur pour l’analyse de la ligne de commande est plus verbeuse.

La version Java contient plus de fichiers car les tests unitaires sont séparés, alors qu’en Rust ils se trouvent dans le même fichier que les classes qu’ils testent.

Juste pour information, voici les résultats pour le client Android :

$ cloc app/src ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Java 15 198 321 875 XML 6 7 2 76 ------------------------------------------------------------------------------- SUM: 21 205 323 951 ------------------------------------------------------------------------------- Taille des binaires -------------------------------------------- Java gnirehtet.jar 61K -------------------------------------------- Rust gnirehtet 3.0M after "strip -g gnirehtet" 747K after "strip gnirehtet" 588K --------------------------------------------

Le binaire Java lui-même est bien plus petit. La comparaison n’est pas juste cependant, vu qu’il nécessite l’environnement d’exécution Java :

$ du -sh /usr/lib/jvm/java-1.8.0-openjdk-amd64/ 156M /usr/lib/jvm/java-1.8.0-openjdk-amd64/ Utilisation mémoire

Avec une seule connection TCP ouvert, voici la consommation mémoire pour le serveur relais en Java :

$ sudo pmap -x $RELAY_JAVA_PID Kbytes RSS Dirty total kB 4364052 86148 69316

(résultat filtré)

Et pour le serveur relais en Rust :

$ sudo pmap -x $RELAY_RUST_PID Kbytes RSS Dirty total kB 19272 2736 640

Regardez la valeur RSS, qui indique la mémoire réellement utilisée.

Comment on pouvait s’y attendre, la version Java consomme plus de mémoire (86Mo) que la version Rust (moins de 3Mo). De plus, sa valeur est instable à cause de l’allocation de petits objets et leur garbage collection, qui génère aussi davantage de dirty pages. La valeur pour Rust, quant à elle, est très stable : une fois la connection créée, il n’y a plus d’allocations mémoire du tout.

Utilisation CPU

Pour comparer l’utilisation CPU, voici mon scénario : un fichier de 500Mo est hébergé par Apache sur mon ordinateur, je démarre le serveur relais avec perf stat, puis je télécharge le fichier à partir de Firefox sur Android. Dès que le fichier est téléchargé, je stoppe le serveur relais (Ctrl+C).

Voici les résultats pour la version Java :

$ perf stat -B java -jar gnirehtet.jar relay Performance counter stats for 'java -jar gnirehtet.jar relay': 11805,458302 task-clock:u (msec) # 0,088 CPUs utilized 0 context-switches:u # 0,000 K/sec 0 cpu-migrations:u # 0,000 K/sec 28 618 page-faults:u # 0,002 M/sec 17 908 360 446 cycles:u # 1,517 GHz 13 944 172 792 stalled-cycles-frontend:u # 77,86% frontend cycles idle 18 437 279 663 instructions:u # 1,03 insn per cycle # 0,76 stalled cycles per insn 3 088 215 431 branches:u # 261,592 M/sec 70 647 760 branch-misses:u # 2,29% of all branches 133,975117164 seconds time elapsed

Et pour la version Rust :

$ perf stat -B ./gnirehtet relay Performance counter stats for 'target/release/gnirehtet relay': 2707,479968 task-clock:u (msec) # 0,020 CPUs utilized 0 context-switches:u # 0,000 K/sec 0 cpu-migrations:u # 0,000 K/sec 1 001 page-faults:u # 0,370 K/sec 1 011 527 340 cycles:u # 0,374 GHz 2 033 810 378 stalled-cycles-frontend:u # 201,06% frontend cycles idle 981 103 003 instructions:u # 0,97 insn per cycle # 2,07 stalled cycles per insn 98 929 222 branches:u # 36,539 M/sec 3 220 527 branch-misses:u # 3,26% of all branches 133,766035253 seconds time elapsed

Je ne suis pas un expert pour analyser les résultats, mais de ce que je comprends de la valeur task-clock:u, la version Rust consomme 4× moins de temps CPU.

Conclusion

Réécrire Gnirehtet en Rust a été une formidable expérience, où j’ai appris un super langage et de nouveaux concepts de programmation. Et maintenant, nous avons une application native avec de meilleures performances.

Bon reverse tethering !

Gravatar de ®om
Original post of ®om.Votez pour ce billet sur Planet Libre.

Thuban : Bilan libre de septembre 2017 (n°10)

Un peu en avance ce mois-ci, mais je sais que la fin du mois ne sera pas très riche car l'emploi du temps est chargé. Voici donc un résumé de mes quelques contributions à des projets libres au cours du mois de septembre, en espérant vous donner envie d'en faire autant.

Manuel (auto)? hébergement
Concernant le manuel pour s'(auto?) héberger, j'ai bien avancé et je suis en mesure de le publier lorsqu'OpenBSD 6.2 le sera (d'ici un mois?). Les gains de la précédente version couvreront une publication simple (pas en librairie) et c'est très bien puisque de toutes façon il n'y a pas de ventes chez les libraires. Cependant, selon mes moyens, je voudrais accompagner le manuel d'un petit plus. À ce propos, ce sont vraiment vos remarques qui m'ont permi de le corriger/simplifier/améliorer. C'est en discutant avec des collègues néophytes que j'ai reçu une bonne claque :

- C'est super intéressant ce truc! Tu peux vraiment être tranquille au moins comme ça. C'est difficile?
- Ce n'est pas plus difficile que se mettre à jardiner. Il faut être soigneux surtout, et y aller étape par étape.
- Et ton bouquin là, il est long?
- Euh, environ 200 pages...
- Ah ouais quand même ! C'est pas si accessible que ça, s'il faut se taper 200 pages avant d'y arriver.

*VLAN.
C'est tellement vrai. Mis à part quelques êtres à parts, il faut être carrément motivé.
J'ai donc décidé d'accompagner le manuel complet par un e-book plus court qui contient des fiches pratiques. Vous y trouverez la recette pour avoir son serveur web, une autre pour avoir son serveur mail... Chaque chapitre ne dépasse pas les 4 pages (c'est le max) et va à l'essentiel.

Autres projets

  • J'ai configuré la prochaine session de l'iso permettant d'aborder OpenBSD, à savoir isotop. Elle se construit en -current et ma foi ça semble fonctionner comme prévu. J'attends la publication d'OpenBSD 6.2 pour approfondir les tests.
  • Pour obsd4a.net, j'ai bricolé des thèmes et je termine le partenariat avec notre hébergeur.
  • Avec l'aide de PengouinBSD, le miroir OpenBSD hébergé par obsd4a a maintenant une version https.
  • Un peu de traduction de la FAQ d'OpenBSD sur le wiki obsd4a.
  • Je suis de près le projet ldnscripts de 22decembre pour DNSSEC. Cet outil remplace les usines à gaz comme Opendnssec Quelques commits sont de moi, mais ce n'est rien comparé à son travail.
  • J'ai fait quelques commits à blogotext, le moteur de ce blog. Notamment, on peut retenir la séparation du javascript en fichier à part, la création de logos (qui n'ont pas été retenus par le vote de la communauté :) ), le passage de l'user-agent à une version plus à jour, la création d'un fichier robots.txt à l'installation.

Et voilà, ça sera tout :)

i'm out

Gravatar de Thuban
Original post of Thuban.Votez pour ce billet sur Planet Libre.

Carl Chenet : Déjà 100 abonnés au Courrier du hacker une semaine après son lancement

Une semaine après son lancement, le Courrier du hacker, une newsletter hebdomadaire publiée le vendredi qui propose les meilleurs liens du Logiciel Libre et Open Source francophones, vient de passer les 100 abonnés !

La première édition du Courrier du hacker a été publiée vendredi dernier à 80 abonnés. Le nombre d’abonnés avant la première édition a démontré l’intérêt d’une newsletter hebdomadaire récapitulative.

La source des liens du Courrier du hacker

En effet pour ceux qui ne peuvent pas se connecter régulièrement au Journal du hacker, il était dommage de passer à côté de nombres de liens très intéressants. D’où l’idée de rassembler au sein d’une newsletter arrivant directement dans vos e-mails le vendredi afin de la parcourir tranquillement pendant le week-end.

 

E-mail S'abonner

Si vous n’avez pas le temps de suivre l’évolution de l’actualité sur le Journal du hacker, n’hésitez pas à vous abonner via le formulaire ci-dessus ou directement sur le Courrier du hacker.

Gravatar de Carl Chenet
Original post of Carl Chenet.Votez pour ce billet sur Planet Libre.

Articles similaires

Miamondo : Le logiciel libre, késako?

Chères lectrices, chers lecteurs,

Je suis ravi d’accueillir le collectif Emmabuntüs en tant que nouvel auteur de Miamondo. Voici donc le tout premier article signé « Emmabuntüs » accompagné d’un beau dessin de Péhä. Cet article a également été publié aujourd’hui même dans le journal  l’âge de faire. Je vous souhaite une bonne lecture.

Benoît.

peha_logiciel_libre

 

Pour bien débuter cette nouvelle saison, revenons sur la définition du logiciel libre, que certains d’entre vous confondent avec un logiciel gratuit dénommé « Freeware » ou gratuiciel. Or, on va voir que la gratuité n’est pas la principale qualité d’un logiciel libre, et que les logiciels gratuits (gratuiciels) ne sont pas nécessairement libres… Cet amalgame vient du fait qu’il y a une ambiguïté en langue anglaise autour du mot « free » qui peut signifier libre aussi bien que gratuit. Donc dans notre contexte, « Free software » se traduit par « logiciel libre » et non pas « gratuit ». D’ailleurs, un certain nombre d’anglophones utilisent désormais le vocable « Software libre » pour bien marquer la différence.

Alors pourquoi parle-t-on de liberté pour un logiciel ? Cela a plus de sens pour les êtres vivants que pour du virtuel ! En fait, il s’agit d’une liberté d’usage pour vous, pour nous, qui est constituée de 4 libertés numérotées de 0 à 3 (humour typique des informaticiens, Ndlr) par la Free Software Foundation, permettant de définir le logiciel comme libre :

0. la liberté d’exécuter le programme par vous, pour tous vos usages.
1. la liberté d’étudier le fonctionnement du programme et de l’adapter à vos besoins.
2. la liberté de redistribuer des copies du programme -ce qui implique la possibilité de donner, aussi bien que de vendre des copies. Par exemple en France, le chiffre d’affaires du logiciel libre représentait 4,5 Milliards d’euros en 2016.
3. la liberté d’améliorer le programme et de distribuer vos améliorations au public, pour en faire profiter tout le monde.

Quand le logiciel ne remplit pas ces 4 libertés, il est qualifié de propriétaire (ou de privateur) même s’il est distribué gratuitement. En l’utilisant, vous acceptez implicitement la licence, qui vous interdit de l’étudier, de le modifier, de le céder à des tiers. Il ne vous appartient pas, vous avez simplement un droit d’usage très limité.

Pour compléter la présentation du logiciel libre, voici une réflexion le concernant, proposée par Richard Stallman, qui fonda il y a 30 ans ce mouvement libertaire, ainsi que la Free Software Foundation :

« Quand les utilisateurs ne contrôlent pas le programme, c’est le programme qui contrôle les utilisateurs. Le développeur contrôle le programme, et par ce biais, contrôle les utilisateurs. Ce programme non libre, ou « privateur », devient donc l’instrument d’un pouvoir injuste. »

A partir du principe du logiciel libre, sont nés de grands logiciels que vous utilisez tous les jours, comme Wikipédia, Linux (la base, entre autres, d’Android), Firefox, LibreOffice, VLC, etc. Preuve que la liberté est gage de qualité et d’utilisation pour tous !

Le concept de la licence du logiciel libre (GPL : GNU General Public License) a aussi permis la création des formats ouverts. Avec les formats, on ne fait pas référence au logiciel global, mais à la structure même des données du logiciel, qui est donc ouvertement publiée, ceci permettant à des développeurs de créer des logiciels pour traiter ces données dans le présent mais aussi dans le futur, comme la Pierre de Rosette a permis à Jean-François Champollion de déchiffrer les hiéroglyphes. Dans un format propriétaire, si l’éditeur arrête de développer son logiciel pour lire vos données, celles-ci deviennent de facto illisibles, car personne ne sait, et n’a souvent même pas le droit de savoir, comment elles sont codées 😦

Dans cet article, nous avons uniquement employé le terme logiciel libre, et non pas celui d’Open Source, que vous pouvez entendre ou lire dans les médias. Cela n’est pas une erreur de notre part, car ces deux concepts, bien que poursuivant un but similaire (celui de donner une plus grande liberté d’usage aux utilisateurs de logiciels) ont cependant une différence fondamentale qui réside dans leurs philosophies respectives. Selon Richard Stallman dont nous partageons complètement l’analyse,

«  L’open source est une méthodologie de développement; le logiciel libre est un mouvement social ».

Voici deux articles, qui vous permettrons de former votre propre opinion sur ce sujet :
Pourquoi l’expression « logiciel libre » est meilleure qu’« open source »
En quoi l’open source perd de vue l’éthique du logiciel libre

Le mois prochain dans L’âge de faire : comment trouver des ressources libres : musique, images, etc.

Collectif EmmabuntüsGPL V3
Dessin : Péhä CC-BY-SA 2017

 


Gravatar de Miamondo
Original post of Miamondo.Votez pour ce billet sur Planet Libre.

Articles similaires

Pages