./play.it 2.12 : API, GUI et jeux vidéos

Posté par  (site web personnel) . Édité par Davy Defaud, ZeroHeure, play0ad, BAud, Florent Zara, theojouedubanjo, HS-157 et TintinL. Modéré par ZeroHeure. Licence CC By‑SA.
38
10
août
2020
Jeu

./play.it est un logiciel libre qui automatise la construction de paquets natifs pour plusieurs familles de distributions à partir d’installateurs sans DRM pour une collection de jeux commerciaux. Les paquets ainsi générés s’installent ensuite en utilisant les outils standards fournis par la distribution (notamment APT, pacman et emerge).

Une description plus complète est proposée par cette dépêche publiée en 2018 sur votre site préféré : ./play.it installe vos jeux sans prise de tête.

Il s’est écoulé plus d’un an depuis la sortie de la version 2.11, qui remonte à janvier 2019, nous allons donc passer rapidement sur les ajouts de la 2.12 pour plutôt nous attarder sur les divers aspects de ./play.it qui nous ont occupé pendant tout ce temps, et dont le code lui‑même ne représente en fait qu’une petite partie.

Sommaire

Nouveautés de la version 2.12

Même si nous n’allons pas en faire le cœur de cette dépêche, ce serait dommage de ne pas lister les nouveautés de cette nouvelle version.

Comparée à nos mises à jour habituelles, celle‑ci est tout particulièrement massive, en bonne partie parce que l’intégration de nouveautés a tourné au ralenti pendant presque deux ans. On trouve donc dans cette mise à jour certaines contributions qui remontent à aussi loin que fin 2018 !

Le journal des modifications apportées par cette version 2.12 se trouve sur notre forge, en anglais. Mais nous vous en avons préparé une traduction en français ici‑même :

  • nouvelles options :
    • --output-dir : définit le répertoire de destination des paquets générés,
    • --overwrite : remplace les paquets si ils existent déjà,
    • --icons : inclure ou non les icônes dans les paquets ;
  • modifications de la commande principale play.it :
    • retrait de $XDG_RUNTIME_DIR de la liste des chemins possibles pour le répertoire de travail temporaire,
    • évite la recherche de scripts dans des répertoires qui ne sont pas censés en contenir,
    • retrait de lʼidentification des archives par empreinte MD5 ;
  • modifications liées aux archives :
    • lors de lʼutilisation de unzip, seuls les fichiers utiles sont extraits,
    • ajout de la possibilité de passer des archives renommées,
    • ajout de la gestion des archives LHA ;
  • Modifications liées aux moteurs :
    • nouveau moteur : ResidualVM,
    • nouveau moteur : runtime Mono fourni par le système,
    • DOSBox : utilisation de $PLAYIT_DOSBOX_BINARY dans les lanceurs si cette variable est définie ;
  • modifications liées aux paquets :
    • ajout de la possibilité de définir des scripts de post‑installation et pré‑suppression par paquet via des variables dédiées,
    • Arch Linux : amélioration de la cohérence du nommage des paquets 32 bits ;
  • nouvelles fonctions internes :
    • version_target_is_older_than : vérifie si la version de la bibliothèque visée par le script courant est plus ancienne quʼune version donnée,
    • toupper : convertit les noms de fichiers dʼune arborescence en lettres capitales ;
  • nouveaux mots‑clés pour définir des dépendances :
    • libgdk_pixbuf-2.0.so.0,
    • libglib-2.0.so.0 / libgobject-2.0.so.0,
    • libmbedtls.so.12,
    • libpng16.so.16,
    • libopenal.so.1 (synonyme d’openal),
    • libSDL2-2.0.so.0 (synonyme de sdl2),
    • libturbojpeg.so.0,
    • libuv.so.1,
    • libvorbisfile.so.3 (synonyme de vorbis),
    • libz.so.1 ;
  • nettoyage et améliorations diverses :
    • réorganisation complète de tout le code lié à lʼaffichage de messages,
    • abandon des derniers chemins codés en dur, liés à la gestion des icônes et des lanceurs .desktop,
    • utilisation de valeurs par défaut différentes selon le système cible pour le chemin dʼinstallation des paquets,
    • activation forcée de lʼoption errexit lors de lʼinitialisation de la bibliothèque,
    • utilisation de dirname et basename au lieu des built‑in correspondant du shell.

Migration du développement

Historique

Comme beaucoup de projets libres, le développement de ./play.it a débuté sur un coin de disque dur, ce qui a sans surprise conduit à la perte de tout historique antérieur au 30 mars 2016 (version 1.13.15) suite à une fausse manipulation sur lʼunique copie existante du code. La leçon immédiatement tirée de cette gaffe a été que ce qui nʼest pas partagé nʼest pas pérenne, et cʼest ce qui a motivé la mise en place dʼun dépôt Git public. La facilitation du travail collaboratif nʼa donc été quʼune conséquence de cette recherche de pérennité, et pas la raison originale du partage.

Suite à ça, le développement de ./play.it a été hébergé successivement sur plusieurs forges mutualisées :

  • GitHub, quʼon ne présente plus, pas tant un choix réfléchi quʼun choix par défaut ;
  • une instance de Gogs maintenue par debian-fr.xyz, communauté dont le développeur principal de ./play.it était déjà très proche ;
  • Framagit, la fameuse instance de GitLab maintenue par Framasoft.

Forge dédiée

Au fil du temps, ./play.it a commencé à se diviser en plusieurs dépôts pour maintenir plus efficacement les différents aspects du projet. À ça se sont ajoutés des besoins particuliers au niveau des tests automatisés. Et, bien sûr, une furieuse envie de comprendre comment fonctionne une forge logicielle.

Nous avons donc monté une forge sur un serveur dédié, grandement aidés de ce côté par le boulot de dingue de lʼéquipe qui maintient GitLab au sein de Debian. En retour, nous essayons à lʼoccasion de leur donner un coup de main.

Hasard du calendrier, cette migration a eu lieu peu de temps avant lʼarticle « Déframasoftisons Internet ! » annonçant la fin programmée (mais pas pour tout de suite) de Framagit.

Cette instance auto‑hébergée se trouvait sur un VPS loué chez Digital Ocean jusque mi‑juillet 2020, et a depuis migré sur un autre VPS loué cette fois‑ci chez Hetzner. Pour une machine virtuelle similaire et un niveau de service qui semble comparable, ce changement de prestataire permet de diviser par deux les coûts de l’hébergement de cette forge. Coût, pour rappel, payé par une personne seule, les dons financiers sont donc d’autant plus appréciés qu’ils sont très rares.

À la grande surprise de notre administrateur système, cette dernière migration n’a pris qu’une petite poignée d’heures sans interruption de service visible par nos contributeurs.

Accès à la forge

Cette nouvelle forge est accessible sur forge.dotslashplay.it. Les inscriptions y sont ouvertes au public, en contrepartie nous vous demandons de ne pas en abuser, en particulier nous ne souhaitons pas héberger de projets sans rapport avec ./play.it. Des exceptions sont tout de même mises en place pour nos contributeurs réguliers, dont nous hébergeons certains projets personnels.

Bref, si vous voulez profiter de cette forge pour héberger vos projets, le prérequis est dʼavoir fait avancer ./play.it dʼune manière ou dʼune autre.

API

La collection de jeux gérés grossissant sans cesse, nous avons lancé le développement d’une API publique permettant d’accéder à tout un tas d’informations liées à ./play.it.

Cette API, qui n’est pas encore stabilisée, est simplement une interface à une base de données versionnée listant la totalités des scripts ./play.it, des archives gérées, et des jeux installables par ce biais. Des liens sont bien sûr faits entre ces éléments, ce qui permet de l’utiliser pour répondre à des requêtes du type : « Quels paquets doivent être disponibles sur mon système pour installer Cæsar Ⅲ ? » ou « Quels sont les jeux gratuits gérés via DOSBox ? ».

À l’origine développée pour servir de support au nouveau site Web en cours de développement (on en cause un peu plus loin dans cette dépêche), cette API devrait faciliter le développement de divers outils autour de ./play.it. En particulier, celle‑ci sera utile à qui souhaiterait construire un gestionnaire de jeux vidéo complet (téléchargement, installation, lancement, etc.) utilisant ./play.it comme une de ses briques de base.

Pour ceux qui sont curieux du côté technique, il s’agit d’une API basée sur Lumen effectuant des requêtes sur une base de données MariaDB, le tout auto‑hébergé sur une Debian Sid. Non seulement le code de l’API est versionné sur notre forge, mais aussi la structure et le contenu de la base de données, ce qui permettra à ceux qui le souhaitent de facilement en installer une version locale.

Nouveau site Web

Basé sur l’API que nous venons d’évoquer, un nouveau site Web est en cours de préparation et devrait à terme remplacer notreb site Web actuel basé sur DokuWiki. En effet, si l’absence de base de données et la structure en fichiers plats de DokuWiki semblait attirante quand ./play.it ne gérait encore qu’une poignée de jeux, cet avantage s’est transformé en inconvénient à mesure que la collection de jeux gérés par ./play.it a grossi.

Nous parlerons probablement plus en détails de ce site Web lors de la prochaine dépêche pour la sortie de la version 2.13 de ./play.it, mais vous pouvez déjà jeter un œil sur une démo publique de la version en cours de développement sur notre forge.

Si vous souhaitez donner un coup de main de ce côté, des tâches prioritaires ont été identifiées pour obtenir un nouveau site Web permettant de remplacer celui actuellement en activité. Et pour ceux qui s’intéressent à la technique, ce site Web est développé en PHP en se basant sur le cadriciel Laravel. La version en cours de développement est hébergée pour l’instant sur la même Debian Sid que l’API.

GUI

Une remarque assez régulière qui nous a été faite sur le projet est que, si lʼobjectif est de rendre lʼinstallation des jeux accessible à nʼimporte qui sans bagage technique particulier, devoir lancer des scripts dans le terminal reste quand même quelque chose dʼassez intimidant. Ce à quoi notre réponse a été jusque‑là que le projet nʼavait pas pour vocation à intégrer une interface graphique par lui‑même (principe KISS, encore et toujours), mais quʼil devrait, à terme, être assez facile de développer une interface graphique tierce pour se greffer dessus.
Eh bien, il se trouve que cʼest désormais chose faite. À peu près vers le moment de parution de notre dernière dépêche, lʼun de nos contributeurs, se basant sur lʼAPI dont nous venons de parler, a développé un petit prototype qui nous a semblé suffisamment utilisable pour mériter un peu de mise en avant. :-)

Concrètement, il sʼagit dʼun petit bout de code Python 3 (lʼIHM entièrement en shell POSIX, cʼest pour plus tard :-°), utilisant GTK 3 (et quand même un terminal VTE pour afficher le retour des commandes utilisées, mais lʼutilisateur nʼa jamais à aller taper quoi que ce soit dedans, en dehors éventuellement de son mot de passe root pour lʼinstallation des paquets). Cela a dʼailleurs permis de vérifier que, comme nous lʼavancions, ce serait assez simple, puisquʼun script de moins de 500 lignes de code (écrit rapidement en cours de week‑end) suffit à faire le travail !

Bien entendu, ce projet d’interface graphique reste indépendant du projet principal, et maintenu dans un dépôt séparé. Il nous paraît intéressant de le mettre en avant pour faciliter lʼutilisation de ./play.it, mais ça nʼempêche absolument pas dʼautres projets du même genre de voir le jour, par exemple en se basant sur un autre langage ou sur une autre bibliothèque graphique (nous nʼavons, globalement, aucun attachement particulier à Python ni à GTK).

Lʼutilisation de cette IHM se passe en trois étapes : tout dʼabord, une liste des jeux proposés est affichée, directement listée par notre API. Il suffit alors de choisir dans la liste (éventuellement à lʼaide de la barre de recherche) le jeu que lʼon veut installer. On passe alors sur une deuxième vue, qui affiche la liste des fichiers requis. Dans le cas où plusieurs alternatives sont possibles, lʼutilisateur choisit celle qui lʼintéresse le plus. Tous ces fichiers doivent se trouver dans un même répertoire, la barre dʼadresse en haut permettant de choisir lequel utiliser (cliquer sur le bouton dʼouverture en haut à droite permet dʼobtenir une fenêtre de navigation). Une fois que ceux‑ci sont présents (sʼils sont téléchargeables, ils seront automatiquement récupérés par le logiciel), on peut passer à la troisième étape, qui consiste simplement à regarder ./play.it faire son travail. :-) Ceci fait, un simple clic sur le bouton en bas à gauche permet un premier lancement du jeu (même si, à partir de là, celui‑ci est intégré dans votre système comme dʼhabitude, et donc il nʼy a plus besoin de passer par cet outil).

Pour télécharger les fichiers manquants le cas échéant, lʼIHM utilise, selon ce qui est disponible sur le système, wget, curl ou aria2c (ce dernier présentant lʼavantage de gérer également les torrents), dont les retours seront affichés dans le terminal lors de la troisième phase, juste avant lʼexécution des scripts. Pour lʼélévation de droits nécessaire à lʼinstallation des paquets, sudo est préféré sʼil est présent (avec lʼoption permettant de lancer une application tierce pour demander le mot de passe, si la variable dʼenvironnement correspondante est définie, ce qui est sans doute plus convivial), sinon cʼest su qui sera utilisé.

Naturellement, toute suggestion d'amélioration sera lue avec plaisir.

Nouveaux jeux

Évidemment, une dépêche comme celle‑ci ne serait pas complète sans la liste des jeux ajoutés à notre collection depuis la sortie de la version 2.11, la voici donc :

  • 7 Billion Humans
  • Agatha Christie: The ABC Murders
  • Age of Mythology Demo
  • Among the Sleep
  • Anomaly: Warzone Earth
  • Another Lost Phone: Lauraʼs Story
  • Assault Android Cactus
  • Baba Is You
  • Blade Runner
  • Bleed
  • Bleed 2
  • Blocks that matter (anciennement géré par ./play.it 1.x)
  • Butcher Demo
  • Capsized
  • Cayne
  • Cineris Somnia
  • Commandos 3: Destination Berlin
  • Diablo
  • Din’s Curse
  • Divine Divinity (anciennement géré par ./play.it 1.x)
  • Duet (anciennement géré par ./play.it 1.x)
  • Earthworm Jim
  • Edna & Harvey: The Breakout — Anniversary Edition
  • Element4l
  • Factorio — Demo
  • Finding Paradise
  • Firewatch
  • FlatOut 2
  • Forced
  • Forgotton Anne
  • Freelancer Demo
  • Frostpunk
  • Full Throttle Remastered
  • Giana Sisters: Twisted Dreams
  • Gibbous — A Cthulhu Adventure
  • Gorogoa
  • Indiana Jones and the Last Crusade
  • Into the Breach
  • Kerbal Space Program
  • LEGO Batman: The Videogame
  • Lego Harry Potter Years 1-4
  • Maniac Mansion
  • Metal Slug 3 (anciennement géré par ./play.it 1.x)
  • MIND: Path to thalamus
  • Minecraftn 4K
  • Minit
  • MonkeynIslandn4: Escape from Monkeynn Island
  • Multiwinia (anciennement géré par ./play.it 1.x)
  • Mushroom 11
  • Myst: Masterpiece Edition (anciennement géré par ./play.it 1.x)
  • Neverwinter Nights: Enhanced Edition
  • Overgrowth
  • Perimeter
  • Populous: Promised Lands (anciennement géré par ./play.it 1.x)
  • Populous 2 (anciennement géré par ./play.it 1.x)
  • Prison Architect
  • Q.U.B.E. 2
  • Quern — Undying Thoughts
  • Rayman Origins
  • Retro City Rampage (anciennement géré par ./play.it 1.x)
  • RiME
  • Satellite Reign (anciennement géré par ./play.it 1.x)
  • Star Wars: Knights of the Old Republic (anciennement géré par ./play.it 1.x)
  • Starship Titanic
  • SteamWorld Quest: Hand of Gilgamech
  • Stellaris
    • Ancient Relics Story Pack
    • Apocalypse
    • Arachnoid Portrait Pack
    • Distant Stars Story Pack
    • Federations
    • Horizon Signal
    • Humanoids Species Pack
    • Leviathans Story Pack
    • Lithoids Species Pack
    • Megacorp
    • Plantoids Species Pack
    • Synthetic Dawn Story Pack
    • Utopia
  • Strike Suit Zero
  • Sundered
  • Sunless Skies
    • Cyclopean Owl DLC
  • Symphony
  • Tangledeep
  • Tengami
  • Tetrobot and Co.
  • The Adventures of Shuggy
  • The Aquatic Adventure of the Last Human
  • The Count Lucanor
  • The First Tree
  • The Longing
  • The Pillars of the Earth
  • The Witcher (anciennement géré par ./play.it 1.x)
  • The Witcher 3: Wild Hunt
  • Tonight We Riot
  • Toren
  • Touhou Chireiden ~ Subterranean Animism — Demo
  • Touhou Hifuu Nightmare Diary ~ Violet Detector
  • Triple Triad Gold
  • Vambrace: Cold Soul
  • VVVVVV (anciennement géré par ./play.it 1.x)
  • War for the Overworld (le jeu de base était déjà géré, de nouvelles extensions ont été ajoutées) :
    • Heart of Gold
    • Seasonal Worker Skins
    • The Under Games
  • Warcraft: Orcs & Humans
  • Warhammer 40,000: Dawn of War — Winter Assault Demo
  • Warhammer 40,000: Gladius — Relics of War
  • Warlords Battlecry II (anciennement géré par ./play.it 1.x)
  • Wing Commander (anciennement géré par ./play.it 1.x)
  • Wing Commander II (anciennement géré par ./play.it 1.x)
  • Yooka Laylee
  • Zak McKracken and the Alien Mindbenders

Si votre jeu favori n’est toujours pas inclus à la collection de ceux gérés par ./play.it, il est temps d’en faire la demande via l’espace dédié sur notre forge. Le seul critère d’acceptation est que ledit jeu existe dans une version sans gestion des droits numériques (DRM).

Et ensuite ?

Notre équipe est inépuisable, le boulot sur la future version 2.13 a donc déjà commencé… Quelques objectifs importants sont au programme pour cette prochaine version :

Si vos attentes ne font pas partie de cette liste, n’hésitez pas à le signaler dans les commentaires de cette dépêche. ;)

Aller plus loin

  • # Déjà disponible chez vous !

    Posté par  (site web personnel) . Évalué à 10.

    Grâce à la réactivité impressionnante des mainteneurs de ./play.it au sein des distributions, cette version 2.12 publiée avant-hier est déjà disponible pour :

    Merci à eux pour ce boulot de qualité ;)

  • # Soutien financier

    Posté par  (site web personnel) . Évalué à 6. Dernière modification le 13 août 2020 à 12:04.

    On nous pose pas mal de questions ces dernières semaines au sujet de la possibilité de soutenir financièrement ./play.it. Je vais essayer d’en parler plus en détails dans la prochaine dépêche, mais c’est probablement une bonne idée d’évoquer le sujet maintenant.

    Nous acceptions pendant un moment les dons via Liberapay, qui proposait à ce moment des dons anonymes, réguliers, et étalés dans le temps. Mais cette solution a arrêté de nous convenir, pour des raisons que j’évoque dans un commentaire sur une autre dépêche.

    Aujourd’hui, nous ne sommes plus inscrits sur aucune plateforme facilitant les dons d’argent. La méthode que je recommande donc à ceux qui souhaitent nous soutenir de cette manière est de nous contacter directement pour nous demander nos informations bancaires et de passer par un virement. Les dons en liquide de la main à la main sont eux aussi les bienvenus, mais la période ne s’y prête pas vraiment ;)

    Merci au passage aux deux donateurs de 2020, qui ont couvert à eux seuls plus d’un tiers de nos frais d’hébergement annuels \o/

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.