From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ricardo Wurmus Subject: [RFC] A simple draft for channels Date: Fri, 19 Jan 2018 09:24:27 +0100 Message-ID: <87bmhq6ytg.fsf@mdc-berlin.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:49924) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ecRym-00032d-KM for guix-devel@gnu.org; Fri, 19 Jan 2018 03:24:53 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ecRyi-0005td-CZ for guix-devel@gnu.org; Fri, 19 Jan 2018 03:24:52 -0500 Received: from pegasus.bbbm.mdc-berlin.de ([141.80.25.20]:44586) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ecRyh-0005sV-VH for guix-devel@gnu.org; Fri, 19 Jan 2018 03:24:48 -0500 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+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: guix-devel@gnu.org Hi Guix, I=E2=80=99d like to retire GUIX_PACKAGE_PATH as the main way to get third= -party packages, because we can=E2=80=99t really keep track of packages that wer= e added or redefined in this way. I want to replace it with slightly more formal =E2=80=9Cchannels=E2=80=9D. As a first implementation of channels I=E2=80=99d just like to have a cha= nnel description file that records at least the following things: * the channel name (all lower case, no spaces) * a URL from where package definitions can be loaded (initially, this can be restricted to git repositories) Optional fields: * a description of the channel * a URL from where substitutes for the packages can be obtained (this will be backed by =E2=80=9Cguix publish=E2=80=9D) * a mail address or URL to contact the maintainers of the channel, or to view the status of the channel * the Guix git commit that was used when this channel was last updated. This is useful when Guix upstream breaks the ABI or moves packages between modules. On the Guix side we=E2=80=99d need to add the =E2=80=9Cguix channel=E2=80= =9D command, which allows for adding, removing, updating, and downgrading channels. Adding a channel means fetching the channel description from a URL and storing state in ~/.config/guix/channels/, and fetching the git repo it specifies (just like what guix pull does: it=E2=80=99s a git frontend). = It also authorizes the the substitute server=E2=80=99s public key. Internally, it=E2=80=99s just like GUIX_PACKAGE_PATH in that the repos ar= e used to extend the modules that Guix uses. Unlike GUIX_PACKAGE_PATH, however, we now have a way to record the complete state of Guix, including any extensions: the version of Guix and all active channels with their versions. We would also have a way to fetch substitutes from channels without having to =E2=80=9Cglobally=E2=80=9D enable new substitu= te servers and authorize their keys. (Is this safe? Can we have per-user extensions to the set of public keys that are accepted?) Downsides: Guix has no stable ABI, so channels that are not up-to-date will break with newer versions of Guix. Moving around packages to different modules might break channels. That=E2=80=99s okay. It=E2=80=99= s still an improvement over plain GUIX_PACKAGE_PATH. I don=E2=80=99t think it has to be more complicated than that. What do y= ou think? -- Ricardo