From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp10.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id AF7LIa49i2SaKAAASxT56A (envelope-from ) for ; Thu, 15 Jun 2023 18:34:54 +0200 Received: from aspmx1.migadu.com ([2001:41d0:2:bcc0::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp10.migadu.com with LMTPS id cAPkIK49i2QCegAAG6o9tA (envelope-from ) for ; Thu, 15 Jun 2023 18:34:54 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 2E50011124 for ; Thu, 15 Jun 2023 18:34:54 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q9pvI-0003r9-J9; Thu, 15 Jun 2023 12:34:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1q9pvD-0003qx-4q for guix-devel@gnu.org; Thu, 15 Jun 2023 12:34:07 -0400 Received: from cyberdimension.org ([2001:910:1314:ffff::1] helo=gnutoo.cyberdimension.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_CHACHA20_POLY1305:256) (Exim 4.90_1) (envelope-from ) id 1q9pvA-0006jK-B2 for guix-devel@gnu.org; Thu, 15 Jun 2023 12:34:06 -0400 Received: from gnutoo.cyberdimension.org (localhost [127.0.0.1]) by cyberdimension.org (OpenSMTPD) with ESMTP id 1e14ec32; Thu, 15 Jun 2023 16:33:58 +0000 (UTC) Received: from primary_laptop (localhost [::1]) by gnutoo.cyberdimension.org (OpenSMTPD) with ESMTP id a149090c; Thu, 15 Jun 2023 16:33:57 +0000 (UTC) Date: Thu, 15 Jun 2023 18:30:07 +0200 From: Denis 'GNUtoo' Carikli To: Maxime Devos Cc: Liliana Marie Prikler , guix-devel@gnu.org Subject: Re: FSDG issues of SCUMMVM-based games Message-ID: <20230615183007.78b46914@primary_laptop> In-Reply-To: References: <48ce733acba20030aba9eba1a45e18a805cfcf73.camel@gmail.com> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.37; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/LyuAsy.zZXrVv0hJrlIOW0y"; protocol="application/pgp-signature"; micalg=pgp-sha256 Received-SPF: pass client-ip=2001:910:1314:ffff::1; envelope-from=GNUtoo@cyberdimension.org; helo=gnutoo.cyberdimension.org X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: guix-devel-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN ARC-Seal: i=1; s=key1; d=yhetil.org; t=1686846894; a=rsa-sha256; cv=none; b=Y9V5+cd7KmqZ0O4yZpkENkLzlljVX1DHqB0aFzrd8vQcQ3GZlWdS5giD+cQlpPfvN+yxKy JyeuvB04+Q/CZ+1FXI+21VOcOnVkbQbr1GWdLWi9Cgz3SB9UjetDQJJhZzVtpPHvparz9m gpZGuRS0AsNBPN8qwQJRLT+jZbY4WpWkbLc7xpHBE4pZYzcWnIzSIObSPrjlI2V6QiIQsP 24Eb9sE6IG/RXJw2j+s9vQQsbaDZKzvlvoVGbf/0jtZK77DMq3quWE74Odu73XKdD2GX25 Tg8xmCFVqXewIElHuD2wJ9yf8ff4QM5LXNIo6ZG+qK5eEfWARtR9Hg+eVlW7ag== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1686846894; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post; bh=GjQLMRW9oi+ovmEwKdTTkTGxf3bk6HknDWGueDTD4WU=; b=sZuXK9mIwPpm9itYgfuG5f7YUo5RKvYJ7p4pbKUEEALMKj6wsaFSKg2UkUkuNzPI2uzxzW FsK4JB3ST8IUml7aXsfe0GIea/Jp3xVuT13lIpqctvQ6OFA75B0PMQ7BUGhw1N6qEYbIJ5 k/d1PeOK0gfdIPa9p8661i09JeirBELu/K8Miptmk0/oB8XPugdupBFzIvrG56J8FnXMyj b2c73S4x4yktFYuVGFkxk1CZT7B9/35pL+puntzqJVl1jPeHLS2cDwFHK+x6TTtqf/0xbx Cqd6Ptur1mo4ykxbku5P/okKXu6XM7t0e8EFm5rwuhDvavwHqo+3QYMoaBBdiw== Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" X-Migadu-Scanner: scn0.migadu.com X-Migadu-Spam-Score: -3.13 X-Spam-Score: -3.13 X-Migadu-Queue-Id: 2E50011124 X-TUID: fIn9u1OIyCvv --Sig_/LyuAsy.zZXrVv0hJrlIOW0y Content-Type: multipart/mixed; boundary="MP_/8LqUIz=4aVlo_YdjkIk0gjD" --MP_/8LqUIz=4aVlo_YdjkIk0gjD Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Hi, About the license it's still unclear if it's free or not as some people pointed on the gnu-linux-libre mailing[1] list that it's a bit similar to the open font license, but that is a license for fonts not code though. So I've looked at the other aspects (missing source code, etc). On Sat, 6 Aug 2022 17:24:52 +0200 Maxime Devos wrote: > As such, I agree they should not be distributed (unless the actual=20 > sources are found, but even then there is (1.)), as per the first=20 > sentence of =E2=80=98(guix)GNU Distribution=E2=80=99. For the lack of missing source code I've looked a bit more in depth about Drascula and the other games mentioned and here's what I found below. Drascula: --------- The file used by ScummVM is Packet.001. Apparently it's an ARJ archive: > $ file Packet.001 > Packet.001: ARJ archive data, v7, slash-switched, created 11 dec > 1980+18, original name: PACKET.ARJ, os: MS-DOS And binwalk can manage to extract the files from it: > $ binwalk -e Packet.001 There might be way better tools to do that but I don't know them. That extracted 1146 files. One of these files is DRASCULA.COM, and it's safe to assume that it should be a dos executable because many of these games were also released for DOS. There are other .COM files too. File also seems to think that DRASCULA.COM is a dos executable (file is not 100% reliable). > $ file DRASCULA.COM=20 > DRASCULA.COM: DOS executable (COM), start instruction 0xeb3a9043 > 6f6d7069 I've no idea what most of the files are for but here's their extensions: > $ ls | sed 's#.*\.##' | sort -u > ALD > ALG > ALS > arj (that could be the header of the Packet.001 file) > BIN > CAL > CFG > COM > DEV > DRV > EPA > EXE [GSAVE* (GSAVE00, GSAVE01, .. GSAVE10)] > RCT > VOC So: - We lack the source code for DRASCULA.COM - If people re-make ARJ archives without any of the executables, and that the game still works, then still have issues about the other files that might contain code that lack corresponding source code. More on that below (in the part about draci-historie). Lure: ----- The files used by ScummVM are: Disk1.vga Disk2.vga Disk3.vga and Disk4.vga I don't know much more about the format. I've also found an executable without source code (Lure.exe) in one of the source pacakge, but Guix probably has a mechanism to take care of that to republishing modified source code without Lure.exe. queen: ------ The file used by ScummVM is queen.1c, but I don't know more. sky: ---- The following 3 files are used by ScummVM: - sky.cpt: Targa image data - Map - RLE 487 x 608 x 1 +353 +412 - 1-bit alpha - sky.dnr: DOS executable (COM), start instruction 0xe9130000 cfea0000 - sky.dsk: data File seems wrong with sky.cpt, and I've no idea if file is write with sky.dnr. There are also deeper issues: ------------------------------ - All these files are not built from source, so it's complicated to understand the provenance of what's inside. And so it's probably safer not to ship them (unless we build everything from source) because we're unsure that there is some corresponding source code inside.=20 - Even if there was complete source code inside, we need to be able to modify that source code somehow, so doing that might require a lot of work to research or build the tools for that. - ScummVM might contain checksums (See the "4. Play the recompiled game" of the draci-historie build documentation [3]) but if someone manages to build a game for ScummVM, it could be added as a dependency of ScummVM and its checksum could be added inside ScummVM at compilation time.=20 Also if: - There are no free programs for ScummVM (a hello world under a free license would could count as a free program) (we don't know if it's the case or not) - ScummVM needs to be patched to run modified games (this is very likely) - We don't know if it's possible to build a game for ScummVM with only free software (the game doesn't necessarily need to be public but free software tools would need to exist to build it). Then it would clearly steers users toward nonfree software.=20 Though here we don't know if there are free programs or not but we also cannot tell users that scummVM is usefull with a specific free program or show them a use case that doesn't require nonfree software, so we might also have a problem with that. A way forward: -------------- A possibility here could be to remove ScummVM and the games that run in it. Another would be to find a 100% free program for ScummVM (that doesn't have nonfree dependencies for being modified or rebuilt) or to find a way to make your own program for ScummVM with 100% free software. I've looked a bit at another game (draci-historie[2]) that has some source code published. This game is not packaged nor redistributed by Guix but it looks way better than the other freedom wise and it can teach us how ScummVM games are made. Its probably not good enough as-is as its source code also also relies on a tarball that contains executable to build the game and I also didn't manage to build it with Guix yet (I've attached a file with my attempt) but maybe it's possible to get it to build and maybe we can build a 100% free software version of it. For the licenses the website has the following: > In 2006, I (Robert =C5=A0palek) released the source codes under the GNU > GPL2 license. > [...] > The game has been released under the GNU GPL license version 2, > hence you can download it for free including full source codes. The > new game engine is a part of ScummVM and its source codes are thus > also a part of it. The old game engine was written in Borland Pascal > and Turbo Assembler, and only runs on MS-DOS. It can be downloaded > below. Besides the game player you can also download the source codes > of the game scripts written in our proprietary game programming > language, and source images, sounds, and animations.=20 So I'm unsure about the license of the executable, game data, etc. The interesting thing is that it has some draci-historie specific scripting language and a compiler for it. So we can safely assume that the other games most likely have a way to script things and that the games are complex enough to have scripts. And these scripts may need to be compiled here (I've no idea how scripts look like for the other games). A way forward would be to try to build this draci-historie game if we really want to have ScummVM games and to patch ScummVM to use the checksums from the newly built game. There is also an IDE (QT AGI Studio)[4] and some templates[5] for the AGI game engine supported by ScummVM, but all that require some work because (a) the IDE depends on QT4, and (b) the template license is a bit similar to the games license[6], and (c) if scummVM still has checksums, then users need to build their own version anyway (d) nobody knows if that can work with 100% free software unless people audit or package the software and try to see if it works. References: ----------- [1]This gnu-linux-libre mailing list is at nongnu.org. Despite its name, this mailing list is meant for discussions about all FSDG compliant distributions(even the ones without GNU or linux-libre like Replicant), about the list of software to exclude from FSDG distributions, about adding new distros in the list, etc. [2]https://www.ucw.cz/draci-historie/index-en.html [3]https://www.ucw.cz/draci-historie/src/doc/compiling-the-game.txt [4]https://agistudio.sourceforge.net/#requirements [5]https://github.com/nbudin/agikit-project-template [6]https://github.com/nbudin/agikit-project-template/blob/main/README-origi= nal.txt Denis. --MP_/8LqUIz=4aVlo_YdjkIk0gjD Content-Type: text/x-scheme Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename=draci-historie.scm ;;; Copyright =C2=A9 2023 Denis 'GNUtoo' Carikli ;;; ;;; This file is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; This file is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with this file. If not, see . (use-modules (gnu packages compression) (gnu packages pascal) (gnu packages python) (guix build-system gnu) (guix build-system trivial) (guix download) (guix gexp) (guix packages) ((guix licenses) #:prefix license:)) ;; Serious issues to address: ;; (1) Is the Data GPLv2 ? Is it redistributable? What the dh-en-2012.zip ;; binaries? ;; (2) compiling-the-game.txt[1] has a section "4. Play the recompiled ;; game" that explains that the game built is incompatible with ;; ScummVM unless scummVM is patched with the md5 of the game binary. ;; [1]https://www.ucw.cz/draci-historie/src/doc/compiling-the-game.txt ;; (3) Actually make it work ;; (4) Patch scummVM and test the game ;; TODO: ;; - Also pakcage licenses and license declarations too ;; - identify and remove the binaries that are not used by the build ;; system. ;; - Make sure only data that can be edited with free software ;; tools remains. ;; - Make a cleaned-up tarball and get that mirrored instead of the ;; binaries we don't use. ;; - Convert that into a function that makes a package for a given ;; language. (define-public draci-historie-dubbing-en (package (name "draci-historie-dubbing-en") ;; There are no versions in the release. (version "1+1") (source (origin (method url-fetch) (uri (string-append "https://www.ucw.cz/draci-historie/binary/dh-en-2012.zip")) (sha256 (base32 "08xffj4648nxp3mjxwf54z1y4nk1718jrnkib2ikj5h509cn4z40")))) (build-system trivial-build-system) (arguments (list #:modules '((guix build utils)) #:builder=20 #~(begin (use-modules (guix build utils)) (let* ((destination (string-append (assoc-ref %outputs "out") "/share/draci-historie-dubbing-en/")) (source (assoc-ref %build-inputs "source")) (unzip (search-input-file %build-inputs "/bin/unzip"))) (invoke unzip source "-d" "source") (copy-recursively "source" destination))))) (native-inputs (list unzip)) (home-page "https://www.ucw.cz/draci-historie/index-en.html") (synopsis "TODO") (description "TODO") (license license:gpl2))) ;; Is the Data really GPLv2(+?) ??? ;; TODO: also pakcage licenses and license declarations too (define-public draci-historie-data (package (name "draci-historie-data") ;; There are no versions in the release. (version "1+1") (source (origin (method url-fetch) (uri "https://www.ucw.cz/draci-historie/source/new-gfx.zip") (sha256 (base32 "09z7kipd1vpd7si4lmpqr1xfb0vc3jfnwllv9zvxiyqrr44n56py")))) (build-system trivial-build-system) (arguments (list #:modules '((guix build utils)) #:builder=20 #~(begin (use-modules (guix build utils)) (let* ((gfx (string-append (assoc-ref %outputs "out") "/share/gfx/"= )) (source (assoc-ref %build-inputs "source")) (unzip (search-input-file %build-inputs "/bin/unzip"))) (invoke unzip source) (copy-recursively "gfx" gfx))))) (native-inputs (list unzip)) (home-page "https://www.ucw.cz/draci-historie/index-en.html") (synopsis "TODO") (description "TODO") (license license:gpl2))) ;; Is the Data really GPLv2(+?) ??? ;; TODO: also pakcage some the documentation in doc/ and package ;; licenses and license declarations too (define-public draci-historie (package (name "draci-historie") ;; There are no versions in the release. (version "1+2") (source (origin (method url-fetch/zipbomb) (uri "https://www.ucw.cz/draci-historie/source/new-sources.zip") (sha256 (base32 "1a7qxigbzmh7v85r83zc9hc347qwrq4iyia044vq87cy8n1z1whb")))) (build-system gnu-build-system) (arguments (list #:tests? #f ; No target #:make-flags #~(list "-d") ;; debug #:parallel-build? #f ;; debug #:phases=20 #~(modify-phases %standard-phases (add-after 'unpack 'fix-build (lambda _ (substitute* "Makefile" (("^DIR=3D/.*") (string-append "DIR=3D" (getcwd) "/build\n"))) ;; TODO: Add support for more LANGS an AUDIO (see doc/compiling-the-gam= e.txt) (substitute* "Makefile" (("^LANGS=3D.*") "LANGS=3Den\n")) (substitute* "Makefile" (("^AUDIO=3D.*") "AUDIO=3D\n")) (substitute* (find-files "scripts" ".py$") (("#!/usr/bin/python") (string-append "#!" (which "python2")))))) (add-after 'fix-build 'unpack-gfx (lambda _ (let* ((gfx (string-append #$(this-package-native-input "draci-historie-data") "/share/gfx/"))) (mkdir-p "build") (copy-recursively gfx "build/orig-gfx")))) (add-after 'unpack-gfx 'unpack-english (lambda _ (let* ((dubbing-en (string-append #$(this-package-native-input "draci-historie-dubbing-en") "/share/draci-historie-dubbing-en/"))) (mkdir-p "build/orig-exe/en") (copy-recursively dubbing-en "build/orig-exe/en")))) (add-before 'build 'clean-source (lambda _ ;; Turbo Pascal configuration files (for-each delete-file (find-files "." ".*\\.tp")) (invoke "make" "clean_all"))) (add-after 'build 'build-dubbing (lambda _ (invoke "make" "dubbing_all"))) (delete 'configure)))) (native-inputs (list draci-historie-data draci-historie-dubbing-en fpc python-2.7 zip)) (home-page "https://www.ucw.cz/draci-historie/index-en.html") (synopsis "TODO") (description "TODO") (license license:gpl2))) ; I didn't fin mentions of "or later" (list draci-historie) --MP_/8LqUIz=4aVlo_YdjkIk0gjD-- --Sig_/LyuAsy.zZXrVv0hJrlIOW0y Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEeC+d2+Nrp/PU3kkGX138wUF34mMFAmSLPI8ACgkQX138wUF3 4mP2dg//ROqK6kn74q6ry0H6KI8zB8bEiN6i/AVPtgJoEtbYcHIX7MLYegS38ZBL nlvfFSkDvSasiHoU6DWDo0Cla+aPFnm5EeGl6xBC80WDOMcMU4cCLG9AQxbA2v+s 7GZRyt13MMeFGz4ENNHYovfhcE10FbWh33jfbIBcx5AApt7kLL4INS+cuj1wpueb gyoxnlapnl6CgBDprrVLDCKkAUx1a+mxDfFjzrkHIUGbT4ZzgdOJUODRPpMxDu8s AG42pPy+6VAE6ztoLfYfjcdjp9T3rziJ9gC/SaSrnFhIesPv/yyXybkBYRH2ETky tAlr4W+ENudkc5HljD5kTh5/A6XonkcEOb7VblHbnGL0UgOPXLjTNvs7jaCpoEid M0OI0T/vlk4rZhjxLbewElCijmdBlbDrYp12ngNjsYpF4XP4k1CSVlY34tzgGZDl 9AodEMfHpohiMqBGDZWZMYogOlXBuGU0ygXDW0Lsux//P6xg1GxWCK13Iy50sZMV 8rqu78dgDkodfEjXr7T7qId/UCKx07ThafpqNRYVPLDAT0iEv/j85/ZdrH6QpUeQ zRv9Gztp94DBcsCzblk+r3cBnu02cgsSAxd0TTmWA5Vzbk80CifiQeYVYYvnoY/m Ia6dYqBetpvj2aoKU5sXWuCKCn5/AYtWI4PqCInh/+8su1ec/IU= =QNEu -----END PGP SIGNATURE----- --Sig_/LyuAsy.zZXrVv0hJrlIOW0y--