Un logiciel libre, c’est quoi ?

lundi 13 juillet 2009
par  Alain BUSSER

Dans cet article, on propose un sujet de TP d’algorithmie en Seconde, portant sur les sujets suivants :

  • Affectation de variables
  • Entrée de données (par formulaire)
  • Affichage de sorties
  • Notion de fonction à deux variables
  • Révisions de géométrie (formules)

Comme deuxième TP de l’année scolaire en Seconde, j’ai imaginé l’énoncé suivant :


Écrire un programme qui réalise les opérations suivantes :

  1. Demander à l’utilisateur de fournir deux données : Un rayon et une hauteur, en centimètres.
  2. Calculer, à partir de ces données, le volume d’un cône dont la base a pour rayon, celui entré par l’utilisateur, et de hauteur, celle fournie par l’utilisateur.
  3. Afficher le volume, en centimètres cubes, arrondi au millimètre cube près.

On peut voir en passant que tout en algorithmique peut me servir de prétexte à faire des révisions de géométrie mais c’est une autre histoire [1]. Pour l’évaluation du TP, je pense créer un fichier sur tableur avec cases à cocher par moi pendant le TP, et dont un modèle pourrait être celui-ci :

Élève entrée de données Calcul du volume sait arrondir connaît le lien entre cm^3 et mm^3 affichage commentaires
Ali
Béatrice
Cheng
Deborah

Ainsi en multipliant par 4 le nombre de cases cochées dans les 5 premières colonnes, j’ai une note sur 20, la dernière colonne étant considérée comme un bonus.


Production attendue des élèves

Voici à quoi pourrait ressembler le programme créé par un élève (ou binôme) avec l’outil JavaScript en ligne :

var r=demander("Quel est le rayon de la base, en centimètres ?");
var h=demander("Quel est la hauteur du cône, en centimètres ?");
var v=Math.PI*Math.pow(r,2)*h/3;
afficher("Le volume de ce cône est ",v.toFixed(3),"cm³");

Et à titre de comparaison, la version « CarScript », laquelle a soit dit en passant été encore plus rapide à mettre au point :

r=Input("Quel est le rayon de la base, en centimètres ?");
h=Input("Quelle est la hauteur du cylindre, en centimètres ?");
v=Math.PI*Math.pow(r,2)*h/3;
Prompt("Le volume du cône est "+v.toFixed(3)+" cm³");

La colonne « commentaires » appelle un commentaire : Lorsqu’un étudiant en algorithmique est chargé de produire un programme, on lui demande régulièrement d’améliorer sa lisibilité en l’indentant et en le commentant. Dans cet esprit, une amélioration du code précédent serait alors la suivante :

var r=demander("Quel est le rayon de la base, en centimètres ?")
//la base est un disque;
var h=demander("Quel est la hauteur du cône, en centimètres ?");
//on demande un nombre en centimètres
var v=Math.PI*Math.pow(r,2)*h/3;
//volume=base*hauteur/3
afficher("Le volume de ce cône est ",v.toFixed(3),"cm³");
//arrondi à 3 décimales

Dans le cas présent, les commentaires ne sont pas vraiment indispensables à la lisibilité du programme, mais lorsque les boucles et tests sont représentés par des indentations ou accolades, la présence après une accolade fermante d’un commentaire comme « fin de la boucle tant que » améliore très considérablement la lisibilité du programme. Or, si la tâche confiée à l’élève est la production de ce qui est ci-dessus, ma tâche à moi est de juger cette production, et la présence de ces fameux commentaires facilite suffisamment cette tâche pour la rendre possible, et justifie qu’on en fasse un bonus. Citons le programme de Seconde :


À l’occasion de l’écriture d’algorithmes et de petits programmes, il convient de donner aux élèves de bonnes habitudes de
rigueur et de les entraîner aux pratiques systématiques de vérification et de contrôle.

Justement, la présence de commentaires dans un programme est une habitude de rigueur [2].

En fin d’année

Il est très possible de revenir à cet exemple lorsqu’on a vu les boucles à sortie conditionnelle, pour garantir que l’utilisateur fournit bien un nombre pour le rayon, et pas du texte ou une liste ou autre :

var r=Number.NaN;
while(isNaN(r))
{r=demander("Quel est le rayon de la base, en centimètres ?");}
var h=Number.NaN;
while(isNaN(h))
{h=demander("Quel est la hauteur du cône, en centimètres ?");}
var v=Math.PI*Math.pow(r,2)*h/3;
afficher("Le volume de ce cône est ",v.toFixed(3),"cm³");

Ce programme commence par réclamer que l’utilisateur lui fournisse le rayon de la base, jusqu’à ce que ce rayon soit un nombre. Dans l’ancienne version, le programme donnait un volume égal à « NaN », c’est-à-dire non numérique. Cette amélioration n’est pas forcément l’objet d’un TP, elle peut être juste une illustration de ce qu’est une boucle à sortie conditionnelle.


Rôle du professeur

Pour évaluer le programme produit par l’élève, le professeur devra

  1. Lire le script écrit par l’élève ;
  2. Tester le programme, donc, l’utiliser.

Or le programme en question est une création de l’esprit. Elle est donc soumise à une législation sur les droits d’auteur, dont le bénéficiaire est l’élève. Dit d’une autre manière, l’élève ayant créé un programme, en est le propriétaire. Et le professeur n’est même pas certain d’avoir le droit de lire cette création. Dans une situation un peu caricaturale, un élève pourrait très bien chercher à me vendre le programme qu’il a créé, et ne m’autoriser à tester (à fin d’évaluation) ledit programme que si je l’ai acheté ! Plus sérieusement, n’étant pas moi-même un génie de l’informatique, je ne peux pas exclure la possibilité que pour faire un exercice en cours de maths, un élève invente un algorithme innovant pour lequel il pourrait avoir intérêt à déposer un brevet logiciel. Ce n’est nullement irréaliste, que l’on songe à la relative simplicité des algorithmes de multiplication rapide comme l’algorithme de Karatsuba ou l’algorithme de Schönhage-Strassen, à l’intérêt commercial et stratégique que représente le kryptage de Rivest Shamir Adleman ou l’algorithme mp3...

Même si un tel évènement est très peu probable, il n’est pas totalement impossible et la prudence m’incite alors à garantir que

  1. la loi m’autorise à consulter le travail algorithmique de mes élèves, pour avoir la possibilité matérielle de leur donner une note ;
  2. la même loi m’empêche, moi ou quelqu’un d’autre, de leur voler leur travail.

Bref j’ai besoin d’un cadre juridique qui me protège et qui protège mes élèves.

Ce cadre juridique existe, il s’appelle un copyleft, et est régi par des licences dont la plus répandue est la GnuGPL, ou Licence publique générale GNU.

Où est-ce que tout ceci nous mène ? À ce que pour pouvoir faire un TP dans de bonnes conditions (notamment la publication en ligne des chefs-d’œuvre de mes élèves), j’ai intérêt à placer la moindre ligne écrite par ceux-ci (même boguée) ainsi que mes corrigés sous la license GPL3.0 tout en garantissant pour l’avenir un placement sous d’éventuelles améliorations de cette license, ce qui se fait en donnant comme référence à la license, le texte « GPL 3.0 ou ultérieure ». Si les élèves enregistrent leur travail dans un document texte appelé « TP_numéro2.js », il serait bon qu’un préambule y soit ajouté sous forme de « commentaire » portant un texte de ce type :

Programme calcul de volume
Ce programme calcule des volumes de cônes
Auteur: Laura Lauret
Date: 12 novembre 2009
Ce programme est libre, placé sous license GPL 3.0 ou ultérieure.
Le texte de la license se trouve à l'adresse suivante:
http://www.gnu.org/licenses

(pour écrire des commentaires sur plusieurs lignes, en JavaScript on utilise les symboles « /* » et « */ ». En Python c’est trois fois le symbole « guillemets » pour le début du commentaire, et la même chose pour la fin du commentaire : «  »« commentaire long »«  ». En Scratch on met tout le commentaire dans un texte (icône tout en haut à droite).

Et comme le professeur est censé montrer l’exemple, il devrait mettre ses corrigés sous la même forme, ce qui avec l’exemple ci-dessus donnerait ceci :

/*
Programme volume du cône
Ce programme calcule des volumes de cônes,
l'utilisateur entre des données: rayon de la base, et hauteur
Auteur: Alain Busser
Date: 13 juillet 2009
Ce programme est libre, placé sous license GPL 3.0 ou ultérieure.
Le texte de la license se trouve à l'adresse suivante:
http://www.gnu.org/licenses
*/

var r=Number.NaN;
while(isNaN(r))
{r=demander("Quel est le rayon de la base, en centimètres ?");}
var h=Number.NaN;
while(isNaN(h))
{h=demander("Quel est la hauteur du cône, en centimètres ?");}
var v=Math.PI*Math.pow(r,2)*h/3;
afficher("Le volume de ce cône est ",v.toFixed(3),"cm³");

Évidemment lorsque le texte sur la license est plus long que le programme proprement dit, tout ceci paraît un peu ridicule. Mais on arrivera vite à des programmes plus longs que ça, et ... il convient de donner aux élèves de bonnes habitudes de rigueur...


Où est l’autoréférence dans tout ça ?

En dehors du fait que si mes élèves lisent cette page, ils ont directement le corrigé du TP [3], il va de soi que, si donner à ses élèves dès le début, des habitudes liées au monde des logiciels libres, car c’est quand même de ça qu’on parle l’air de rien depuis le début de cet article, le professeur est le mieux placé pour montrer l’exemple, en utilisant systématiquement des logiciels eux-mêmes placés sous license GPL, c’est-à-dire libres.

Et au moins le TP doit se dérouler avec des outils libres : L’élève doit écrire un programme dont le code source est ouvert, et il est tout de même préférable qu’il le fasse en utilisant un environnement lui-même ouvert : La voilà, l’autoréférence ! L’important n’est pas que l’élève regarde le source de l’interpréteur ou du compilateur, mais simplement qu’il ait la possibilité de le faire. Sur ce forum, on peut lire un conseil concernant l’environnement IDLE pour Python, qui est écrit ... en Python !

Le gain en algorithmique est conséquent : Quiconque a essayé de savoir comment Excel calcule des nombres pseudo-aléatoires, a fini par renoncer (d’ailleurs c’est illégal...). Alors qu’avec un logiciel libre comme OpenOffice, il « suffit » de télécharger le source, puis de l’ouvrir avec un éditeur de texte, et de lire le source. Apprendre « comment ça marche » est très formateur, et peut donner des idées. Des codes sources particulièrement lisibles (et comme par hasard, ils sont très commentés) sont selon moi celui de Yacas (calcul formel, écrit en Scheme qui est une variante de LISP) et celui de CaRMetal (géométrie dynamique, écrit en Java).

Comme la license GPL m’y autorise, je reproduis ici des extraits de ces suberbes codes sources : Un peu de Yacas d’abord (nombres pseudoaléatoires) :

// second method: update state object and return a new random number (floating-point)
RNGEngine'L'Ecuyer(state_IsList) <--
[
        Local(new'state, result);
        new'
state := {
                Mod(1403580*state[2]-810728*state[3], 4294967087), state[1], state[2],
                Mod(527612*state[4]-1370589*state[6], 4294944433), state[4], state[5]
        };
        result:=Mod(state[1]-state[4], 4294967087);
        {
                new'state,
                MathDivide(If(result=0, 4294967087, result), 4294967088)
        };
];

Magnifique, non ? On y voit immédiatement des tests de primalité à effectuer ! Passons à un extrait de CaRMetal (calcul d’un vecteur normal, dans le dessin d’une courbe cartésienne) :

// coords du vecteur unitaire directeur de (M1M2) :
double lg = Math.sqrt((xm2 - xm1) * (xm2 - xm1) + (ym2 - ym1)* (ym2 - ym1));
double dx = (xm2 - xm1) / lg;
double dy = (ym2 - ym1) / lg;
// coords du point H projeté ortho de P sur (M1M2) :
final double h = (xx - xm1) * dx + (yy - ym1) * dy;
final double xh = xm1 + h * dx;
final double yh = ym1 + h * dy;
// coords du vecteur unitaire directeur de (HP) :
lg = Math.sqrt((xx - xh) * (xx - xh) + (yy - yh) * (yy - yh));
dx = (xx - xh) / lg;
dy = (yy - yh) / lg;

Excellente illustration du cours sur les produits scalaires (pas en Seconde donc) !


Hérédité du copyleft

Puisqu’un programme placé sous les termes de la license GPL est libre, on a le droit, sous certaines restrictions, d’en prendre des morceaux et de les incorporer à son propre projet, ce qui évite d’avoir à tout réinventer à chaque fois. Il y a deux restrictions « évidentes » :

  1. Le morceau de code puisé ailleurs, l’est avec le nom de son auteur : On n’a pas le droit de prétendre en être l’auteur ;
  2. Le morceau de code doit rester sous license GPL, et du coup le tout doit l’être : Si un employé de Adobe est émerveillé par un filtre du Gimp ou de ImageJ et souhaite l’incorporer à la prochaine version de PhotoShop, il n’en a le droit qu’en faisant de PhotoShop un logiciel libre, ce qui n’est pas possible parce que dans ce cas, les autres contributeurs devraient tous mettre leurs contributions sous license GPL, hypothèse peu vraisemblable...

On dit que la license GPL est héréditaire et contaminante. Il semble alors que tout programme rédigé avec un outil libre est automatiquement libre sous GPL d’après le droit américain au moins, et que dans ce cas la référence à la license GPL 3.0 faite ci-dessus est inutile. On peut quand même la garder, ça ne fait pas de mal.

Phénomène significatif : Tout en bas de la page 5 du document d’accompagnement « Ressources pour la classe » d’algorithmique, on lit une note que je ne cite pas puisqu’elle n’est pas placée sous copyleft [4], et qui montre une confusion entre « libre » et « gratuit ». Trouver cette confusion dans un document officiel rend tout de même assez songeur... Un logiciel gratuit mais pas libre, c’est comme un livre qu’on offrirait à tout le monde en n’autorisant que certains à le lire. Un logiciel libre, c’est un livre avec des marges assez grosses pour qu’on puisse non seulement le lire mais l’annoter à volonté. Un tel livre peut d’ailleurs très bien être vendu, comme le montre l’exemple des manuels Sésamath.


Cocorico

La license GPL n’est pas la seule qui existe, il y en a une qui est française, et donc peut-être mieux adaptée au cas présent : La license CeCILL dont le texte figure en suivant ce lien. On y trouve l’extrait suivant qui est une bonne description du travail d’un prof de maths de Seconde :


Le Licencié est autorisé à utiliser le Logiciel, sans restriction quant aux domaines d’application, étant ci-après précisé que cela comporte :

1. la reproduction permanente ou provisoire du Logiciel en tout ou partie par tout moyen et sous toute forme.

2. le chargement, l’affichage, l’exécution, ou le stockage du Logiciel sur tout support.

3. la possibilité d’en observer, d’en étudier, ou d’en tester le fonctionnement afin de déterminer les idées et principes qui sont à la base de n’importe quel élément de ce Logiciel ; et ceci, lorsque le Licencié effectue toute opération de chargement, d’affichage, d’exécution, de transmission ou de stockage du Logiciel qu’il est en droit d’effectuer en vertu du Contrat.

Finalement, l’exemple ci-dessus devient dans ce cas :

Programme calcul de volume
Ce programme calcule des volumes de cônes
Auteur: Laura Lauret
Date: 12 novembre 2009
Ce programme est libre, placé sous license CeCILL.
Le texte de la license se trouve à l'adresse suivante:
http://www.cecill.info/licences/Licence_CeCILL_V2-fr.html
var r=demander("Quel est le rayon de la base, en centimètres ?")
//la base est un disque;
var h=demander("Quel est la hauteur du cône, en centimètres ?");
//on demande un nombre en centimètres
var v=Math.PI*Math.pow(r,2)*h/3;
//volume=base*hauteur/3
afficher("Le volume de ce cône est ",v.toFixed(3),"cm³");
//arrondi à 3 décimales

[1Le tout premier commentaire de la partie « Géométrie dans l’espace » du programme de Seconde se trouve à la page 8 de celui-ci

[2qu’il me reste encore à acquérir mais mon cas personnel n’est pas un exemple à suivre...

[3C’est l’inconvénient des outils en ligne, qui ouvrent la possibilité d’utiliser discrètement un moteur de recherche pendant le TP...

[4la citer serait une « reproduction même partielle » du document, soumise à l’autorisation du directeur général de l’Enseignement Scolaire.


Commentaires

Logo de Dominique TOURNÈS
lundi 13 juillet 2009 à 18h45 - par  Dominique TOURNÈS

Une petite remarque juridique : Alain avait tout à fait le droit de citer la note de la page 5 du document ressource sur l’algorithmique. Dans un tel cas, il ne s’agit pas d’une « reproduction partielle », mais d’une « courte citation », permise par le code français de la propriété intellectuelle, qui dit exactement : « Lorsque l’œuvre a été divulguée, l’auteur ne peut interdire […] sous réserve que soient indiqués clairement le nom de l’auteur et la source [...] les analyses et courtes citations justifiées par le caractère critique, polémique, pédagogique, scientifique ou d’information de l’œuvre à laquelle elles sont incorporées ». Voici donc cette note pour les lecteurs curieux : « Tous les logiciels qui seront présentés par la suite sont « libres » au moins au sens où leur téléchargement l’est ».

Annonces

Prochains rendez-vous de l’IREM

Séminaire EDIM-IREM

- Mercredi 3 mai 2017, 14h-18h, PTU, Saint-Denis, salle S23.6
- Mardi 13 juin 2017, 14h-18h, campus du Tampon
- Mercredi 14 juin 2017, 14h-18h, PTU, Saint-Denis, salle S23.6


Brèves

À travers les labyrinthes : algorithmes et fourmis

dimanche 1er septembre 2013

Quand les chercheurs mettent au point des modèles d’optimisation et de recherche de plus court chemin qui s’inspirent du comportement de masse de colonies de fourmis...
À écouter : Sur les Épaules de Darwin, émission diffusée sur France Inter samedi 31 août 2013.

Rencontres Mondiales du Logiciel Libre à St-Joseph

mardi 20 août 2013

Les RMLLd se dérouleront pour la 2e fois à Saint-Joseph du 22 au 25 août.
C’est une opportunité pour les élèves qui suivent la spécialité ISN et les passionnés d’informatique.

Voici pour le samedi et le dimanche quelques interventions choisies :
- http://2013.d.rmll.info/Raspberry-votre-ordinateur-au-format-carte-de-credit?lang=fr
- http://2013.d.rmll.info/Materiel-libre-et-DIY?lang=fr
- http://2013.d.rmll.info/Arduino-de-l-electronique-libre?lang=fr

Noter aussi les conférences Art et Culture du dimanche, ainsi qu’une conférence plus engagée.

Le programme complet se trouve ici. Une radio sera ouverte pour l’occasion.
Des plaquettes à distribuer se trouvent ici.

Hyper-vidéos pour l’algorithmique au lycée

dimanche 19 août 2012

Olivier Roizès, à la demande de l’ADIREM, a réalisé une collection d’hyper-vidéos de présentation de logiciels et environnements de programmation. Ces hyper-vidéos, c’est-à-dire des vidéos contenant des éléments clicables, devraient être utiles aux enseignants désireux de se familiariser avec Python, CaRMetal, R, Rurple, Scilab ou Xcas.

Ouverture du SILO

mardi 1er novembre 2011

Le SILO (Science Informatique au Lycée : Oui !) est un espace collaboratif documentaire de partage et de formation collégiale, à destination des professeurs appelés à enseigner l’informatique au lycée.

Une initiative du CNDP, de l’INRIA et de Pasc@line, à laquelle se sont associés SPECIF, fuscia, EPI et ePrep.

Sur le Web : Site du SILO

Introduction à la science informatique

lundi 12 septembre 2011

Le CRDP de Paris publie le premier ouvrage destiné aux professeurs chargés d’enseigner la nouvelle spécialité « Informatique et sciences du numérique » en Terminale S à la rentrée 2012. Cet ouvrage a été coordonné par Gilles Dowek, directeur de recherche à l’INRIA.

Sur la création de la spécialité ISN, on pourra également consulter l’interview donnée au Café pédagogique par l’inspecteur général Robert Cabanne.

Sur le Web : CRDP de Paris

Deux publications sur l’algorithmique

samedi 17 octobre 2009

L’IREM d’Aix-Marseille publie une brochure de 73 pages, téléchargeable librement, intitulée Algorithmes et logique au lycée. Ces notions sont illustrées et déclinées sur des exercices du programme de spécialité mathématique en série L, mais sont adaptables aux programmes à venir.

Le hors série thématique n° 37 du magazine Tangente, disponible actuellement en kiosque, s’intitule « Les algorithmes. Au cœur du raisonnement structuré ». Extrait de l’éditorial : « La rédaction de Tangente a conçu la quasi-totalité de ce hors série thématique pour qu’il puisse être lu par des élèves de Seconde ».

Une carte mentale pour l’algorithmique

jeudi 10 septembre 2009

Sur son site, Jean-Jacques Dhénin a publié une carte mentale géante qui renvoie vers plus de 30 documents en ligne sur l’algorithmique. Tout ce qu’il faut — et même davantage — pour faire face au nouveau programme de Seconde !

Un catalogue libre d’algorithmes pour le lycée

dimanche 30 août 2009

Guillaume Connan, de l’IREM de Nantes, publie un catalogue libre de 119 pages d’algorithmes pour le lycée. Sur son site très riche, on trouvera d’autres documents en rapport avec l’algorithmique, notamment sur l’utilisation des langages fonctionnels au lycée et sur la comparaison programmation fonctionnelle/programmation impérative.

L’algorithmique à l’IREM de Lille

vendredi 26 juin 2009

Le groupe AMECMI de l’IREM de Lille vient de mettre en ligne des ressources importantes au service des professeurs de Seconde :

- Algorithmique et programmation (Emmanuel Ostenne)
- Bibliographie amoureuse de l’algorithmique (Alain Juhel)

Statistiques

Dernière mise à jour

lundi 22 mai 2017

Publication

745 Articles
Aucun album photo
131 Brèves
11 Sites Web
127 Auteurs

Visites

56 aujourd'hui
1130 hier
2021182 depuis le début
7 visiteurs actuellement connectés