CentraleSupélec
2025-10-20
Philosophie du cours
Vous introduire au monde du logiciel libre (free software) avec sa dimension philosophique et pratique.
Au programme
Ressources
Plusieurs outils sont illustrés par la pratique et triés par besoin sur https://jeremyfix.github.io/OutilsLibres/
Vous pouvez suggérer des modifications sur le dépôt GIT https://github.com/jeremyfix/OutilsLibres
Le pôle logiciel libre de la DINUM administre le Socle Interministériel du Logiciel Libre (SILL)
Evaluation
Philosophie libre
Les quatre libertés selon la Free Software Foundation :
L’accès au code source (open source) est une condition nécessaire mais pas suffisante pour les libertés 1 et 2;
Exemples
Un grand nombre de licenses existent , même parmi celles qui respectent les 3 libertés (utilisation, modification, partage) : https://opensource.org/licenses.
License GPLv3 : license à fort copyleft (non permissive / contaminente / avec obligation de réciprocité) en droit anglo-saxon / License CeCILL en droit Français
License BSD : license permissive (elle permet de produire d’en dériver un logiciel propriétaire)
Licenses Creative Commons CC : Creative commons chooser
Free software \(\neq\) free beer.
Il est tout à fait envisageable de développer des modèles économiques autour du logiciel libre :
Une distribution Linux =
init (e.g. sysv, systemd, launchd, …)Il existe beaucoup de distributions (voir https://en.wikipedia.org/wiki/Linux_distribution#/media/File:Linux_Distribution_Timeline.svg), en général dérivées de :
Unix est le noyau (+outils) commercial, développé par AT&T labs. Linux est développé par Linus Torval dans les années 1990.
Do one thing and do it well - Doug McIlroy
On dispose de plusieurs “petits” outils combinables. D. McIlroy a inventé le concept de “filters/pipes”, au sein d’un shell, e.g. Bourne-Again shell (bash)
Avec GNU Bash, On peut piper “|” des commandes, ou rediriger les entrées et les sorties
Plus d’infos :
ou sur la spécification Filesystem Hierarchy Standard
Extrait :
NAME
hier - description of the filesystem hierarchy
DESCRIPTION
A typical Linux system has, among others, the following directories:
/ This is the root directory. This is where the whole tree starts.
/dev Special or device files, which refer to physical devices. See mknod(1).
/etc Contains configuration files which are local to the machine. Some larger software packages, like X11, can have their own subdirectories below /etc
/home On machines with home directories for users, these are usually beneath this directory, directly or not.
/media This directory contains mount points for removable media such as CD and DVD disks or USB sticks.
/mnt This directory is a mount point for a temporarily mounted filesystem.
/opt This directory should contain add-on packages that contain static files.
/proc This is a mount point for the proc filesystem, which provides information about running processes and the kernel. This pseudo-filesystem is described in more detail in proc(5).
/root This directory is usually the home directory for the root user (optional).
/tmp This directory contains temporary files which may be deleted with no notice, such as by a regular job or at system boot up.
/usr This directory is usually mounted from a separate partition. It should hold only shareable, read-only data, so that it can be mounted by various machines running Linux.
/usr/bin This is the primary directory for executable programs. Most programs executed by normal users which are not needed for booting or for repairing the system and which are not installed locally should be placed in this directory.
/usr/include Include files for the C compiler.
/usr/lib Object libraries, including dynamic libraries, plus some executables which usually are not invoked directly.
/var This directory contains files which may change in size, such as spool and log files.
! Utilisez l’auto-complétion pour naviguer
Utilisateurs
root a tout les droits (super-utilisateur)idPermissions
Les permissions données à un groupe dépendent de flags. Ces permissions sont de trois types, notées “rwx” pour r-ead, w-rite, e-x-ecute, :
Et il y a 3 groupes de permissions :
Autre exemple :
chmod. Changement de propriétaire par chownVoir aussi https://debian-handbook.info/browse/stable/sect.rights-management.html
Editer du texte/du code : vim, emacs, code
Versionner du code : git, github, gitlab. Voir Visual git reference et tutoriels
Illustration de :
La documentation de la distribution Ubuntu, Debian, Arch
Le wiki Ubuntu-fr : https://doc.ubuntu-fr.org/
Naviguer dans le système de fichier : cd, ls
Crérer un répertoire mkdir
Connaître la taille d’un fichier / répertoire : du
Lister les espaces disques df
intéragir avec l’historique history, Ctrl+R
Vous pouvez customiser vos shells avec des rc-files
Une distribution Linux vient avec un gestionnaire de paquets : dnf, apt, pacman, …
Sous Ubuntu, par exemple pour install Texlive :
Ubuntu utilise aussi d’autres formats, e.g. snap (conteneurisé), appimage (installable dans l’espace utilisateur), etc…
https://jeremyfix.github.io/OutilsLibres/outils/familiarisation/#installations-logicielles
Il existe plusieurs formats d’archives : zip, 7z, tar, tar.gz, etc…
$ tldr 7z
7z
File archiver with a high compression ratio.
More information: https://manned.org/7z.
...
- Encrypt an existing archive (including filenames):
7z a path/to/encrypted.7z -ppassword -mhe=on path/to/archive.7z
...
- E[x]tract an archive to a specific directory:
7z x path/to/archive.7z -opath/to/output$ tldr tar
tar
Archiving utility.
Often combined with a compression method, such as gzip or bzip2.
More information: https://www.gnu.org/software/tar/manual/tar.html.
...
- [c]reate a g[z]ipped archive and write it to a [f]ile:
tar czf path/to/target.tar.gz path/to/file1 path/to/file2 ...
...
- E[x]tract a (compressed) archive [f]ile into the current directory [v]erbosely:
tar xvf path/to/source.tar[.gz|.bz2|.xz]
...Recommendation :
On peut rechercher un fichier avec find ou locate :
On peut utiliser le | sur la sortie, e.g. pour compter le nombre de fichier python dans le répertoire courant :
On peut exécuter des commandes sur les fichiers trouvés, e.g. trouver les occurences de import numpy dans les fichiers python
Pour trouver du contenu dans un fichier, on peut utiliser grep ou rg (ripgrep)
$ tldr grep
Find patterns in files using regexes.
More information: https://www.gnu.org/software/grep/manual/grep.html.
- Search for a pattern within a file:
grep "search_pattern" path/to/file
- Search for a pattern in all files recursively in a directory, showing line numbers of matches, ignoring binary files:
grep [-rnI|--recursive --line-number --binary-files=without-match] "search_pattern" path/to/directoryOn peut rechercher/manipuler du contenu de fichier avec awk :
Il est possible de préciser le séparateur de sortie -OFS. Plus d’exemples en TP !
On peut également utiliser sed pour opérer des substitutions :
-i en place):info sed)On peut aussi utiliser des classes de caractères
On peut :
pdftk$ tldr pdftk
pdftk
PDF toolkit.
More information: https://www.pdflabs.com/docs/pdftk-man-page/.
- Extract pages 1-3, 5 and 6-10 from a PDF file and save them as another one:
pdftk input.pdf cat 1-3 5 6-10 output output.pdf
- Merge (concatenate) a list of PDF files and save the result as another one:
pdftk file1.pdf file2.pdf ... cat output output.pdf
...Les outils de base peuvent être:
Templates latex : https://latextemplates.com/
Un document LaTex va gérer :
\label{sec:masection} ... \ref{sec:masection}\cite{Euler1748}Les outils de base peuvent être:
# Introduction
## L'origine du monde {#sec-origine}
L'origine du monde est une oeuvre peinte par Gustave Courbet, exposée au musée d'Orsay depuis 1995. Cette oeuvre est représentée sur la figure @fig-origine.
{#fig-origine}
## Un peu de python ?
```{python}
#| label: fig-line-plot
#| fig-cap: "A line plot "
import matplotlib.pyplot as plt
plt.plot([1,23,2,4])
plt.show()
```Exemples Quarto : https://quarto.org/docs/gallery/
Un document Markdown/Quarto va gérer :
#sec-origine, #fig-xxx ... @sec-origine, @fig-xxx[@Euler1748]Voir par exemple le Tutorial Quarto / VS Code
On peut “coder des slides” (plutôt que du drag/drop clique bouton) en utilisant Quarto/Markdown
---
title: "Les outils du logiciel libre pour l'ingénieur"
author: "Jérémy Fix"
institute: "CentraleSupélec"
date: last-modified
---
# Syllabus
## Contenu du cours
::: {.callout-note}
### Philosophie du cours
Vous introduire au monde du logiciel libre (*free software*) avec sa dimension philosophique et
pratique.
[Free software $\neq$ free beer](https://www.gnu.org/philosophy/selling.html).
:::
...Les supports peuvent être générés en HTML (dynamique), PDF (statique).
Voir par exemple les slides de ce cours
On peut éditer des images/vidéos avec :
convert ou mogrify pour le traitement par lothttps://jeremyfix.github.io/OutilsLibres/outils/images/, https://jeremyfix.github.io/OutilsLibres/outils/vectoriel/
On peut accéder à des machines distantes pour :
scp, rsync, sshfs, mountsshvncscreen, byobuPour se connecter sur ces plateformes, différents systèmes d’authentification existent :
Différents outils permettent de produire des sites web :
Les sites web statiques peuvent être générés et livrés par de l’intégration continue sur la plateforme qui héberge votre dépôt GIT !
Le site du cours https://jeremyfix.github.io/OutilsLibres/ est produit avec mkdocs, voir les sources, voir Figure 1.
La production d’un fichier peut dépendre d’autres fichiers qui peuvent dépendre… e.g. un rapport latex -> pdf qui nécessite des illustrations
La production d’une dépendance peut nécessiter l’exécution d’un programme, e.g. une illustration PDF produite à partir d’un fichier source ipe
Un moteur de production permet “d’automatiser l’ensemble des actions contribuant, à partir de données sources, à la production d’un ensemble logiciel opérationnel” :
Exemple de Makefile pour compiler un projet C++, illustrant les variables automatiques
TARGET=app
SRCS=$(wildcard src/*.cpp)
OBJS=$(patsubst %.cpp,%.o, $(SRCS))
# Default target
all: $(TARGET)
# Links the executable
$(TARGET): $(OBJS)
g++ -o $@ $^
# Build the object files from the sources
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
# Clean up up the project tree
clean:
rm -f $(OBJS) $(TARGET)
# Phony targets are executed even if files called "clean" or "all" exist
.PHONY: clean allExemple de Makefile utilisé pour générer le support de cours Architecture des ordinateurs
IPE_SOURCES=$(wildcard Figs/*.ipe)
IPE_PDF=$(patsubst %.ipe,%.pdf,$(IPE_SOURCES))
SOURCES=$(wildcard *.tex)
support.pdf: $(SOURCES) ipe_pdf
latexmk -pdf support.tex
clean:
rm -f *~ *.aux *.log
ipe_pdf:$(IPE_PDF)
@echo "ipe to pdf conversion done"
Figs/%.pdf: Figs/%.ipe
@ipetoipe -pdf $^ 2> /dev/null
@echo "$@ generated"
ascii_table.pdf:ascii_pdf.tex
latexmk -pdf ascii_pdf.tex
pdfcrop ascii_pdf.pdf
pdftk A=ascii_pdf-crop.pdf cat A2 output ascii_table.pdf
.PHONY: clean ipe_pdfUn code versionné permet :
Un code peut être versionné :
Plusieurs systèmes de versionning existents (e.g. svn, mercurial, git)
Des plateformes comme github / gitlab offrent plus que du versionning :
intégration et déploiement continue CI/CD pour :
receuillir des issues
historiser les fusions merge via des merge requests
organiser les tâches dans des tableaux de bord
héberger un site web (gitlab pages), des images docker, etc…
Votre projet GIT peut être local, ou synchronisé avec un serveur remote (e.g. github, gitlab auto-hébergé, …).
Si synchronisé avec un serveur distant : git push, git pull
GIT prends des instantannés snapshots de votre répertoire, appelés commit associé à un commit-id.
De Pro Git :
Pourquoi les branches :
Les branches sont des étiquettes dans l’arbre des commits.
Commandes utiles : git branch -a, git checkout -b <branch_name>, git checkout <branch_name>
Merge (request) :
main ou master en général)Le merge peut être soumis à relecture Pull Request (PR)
⚠ Vous pouvez être confronté à des conflits :
La suite en TP !

Produced with quarto