From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id 8G1bBdC9L2IuQQAAgWs5BA (envelope-from ) for ; Mon, 14 Mar 2022 23:12:32 +0100 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id OF+sAtC9L2JnUAEA9RJhRA (envelope-from ) for ; Mon, 14 Mar 2022 23:12:32 +0100 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 9ABEB3D0E2 for ; Mon, 14 Mar 2022 23:12:31 +0100 (CET) Received: from localhost ([::1]:45592 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nTsvW-0006yF-Bp for larch@yhetil.org; Mon, 14 Mar 2022 18:12:30 -0400 Received: from eggs.gnu.org ([209.51.188.92]:50770) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTsQz-0006jc-NP for guix-devel@gnu.org; Mon, 14 Mar 2022 17:40:57 -0400 Received: from out5-smtp.messagingengine.com ([66.111.4.29]:34463) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nTsQx-0007SV-TH for guix-devel@gnu.org; Mon, 14 Mar 2022 17:40:57 -0400 Received: from compute5.internal (compute5.nyi.internal [10.202.2.45]) by mailout.nyi.internal (Postfix) with ESMTP id B22CC5C00C2; Mon, 14 Mar 2022 17:40:51 -0400 (EDT) Received: from imap49 ([10.202.2.99]) by compute5.internal (MEProxy); Mon, 14 Mar 2022 17:40:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=6T6lxmSeU7E77zTCx CapHMVcsEN/RYHSbybR6DvvFzg=; b=e3TEoCvC5xmlYGqNNVMHkKbn7o+BrTwxM bBlLf9qYETpmqE2TEn/DamoiS0sqP30D0S291yjoSpM4mADOa8KryCGIWbewrUyk rpFJl5R2T9e9ykI+pSecNCfj882MyRsN4Hba7ojJTT5HPlxMdr4NY+x8tXuNLB/q nV1GtJ6e0FS5VDCRX0Offpa9m6G5R84DBClNXt/ow7t4AfHsqf1PNiAcwor3wn8T 3ND1PsCncuO0Pcf34TsnYpzbXD/32ErCdxyu968jduPLLn6gST0YP170m9nv8l0i c769WUGvQY2Gb9mhgb/12xJ84a+cOlRnXfAPEMDQSe8kRvP85tPtA== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvvddruddvkedgudeglecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpefofgggkfgjfhffhffvufgtsehttdertderredtnecuhfhrohhmpedfffgr vhhiugcutehrrhhohihofdcuoegurghvihgusegrqhifrghrihdrnhgvtheqnecuggftrf grthhtvghrnhepveetjeduteeuiedtgeejgffgteeugeevjefhveelleegtdeileeiueei keefleevnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh epuggrvhhiugesrghqfigrrhhirdhnvght X-ME-Proxy: Received: by mailuser.nyi.internal (Postfix, from userid 501) id 51F6DF6007E; Mon, 14 Mar 2022 17:40:51 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.5.0-alpha0-4907-g25ce6f34a9-fm-20220311.001-g25ce6f34 Mime-Version: 1.0 Message-Id: <26d5e14e-97cf-4346-a434-9e73658495b7@www.fastmail.com> In-Reply-To: <20220314202659.oftyvymu7tjiycba@thebird.nl> References: <20220314202659.oftyvymu7tjiycba@thebird.nl> Date: Mon, 14 Mar 2022 17:40:31 -0400 From: "David Arroyo" To: "Pjotr Prins" , "Ryan Prior" Subject: Re: Building a software toolchain that works Content-Type: text/plain Received-SPF: pass client-ip=66.111.4.29; envelope-from=david@aqwari.net; helo=out5-smtp.messagingengine.com X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, 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-Mailman-Approved-At: Mon, 14 Mar 2022 18:12:08 -0400 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: , Cc: Guix Devel Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Migadu-Flow: FLOW_IN X-Migadu-To: larch@yhetil.org X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1647295951; 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:dkim-signature; bh=6T6lxmSeU7E77zTCxCapHMVcsEN/RYHSbybR6DvvFzg=; b=O6af5wKUntjzi5fNnwrraPdIhGeJK/UBnCA/HtlqzQXcQsr9XnCb6vhOKr//TinxuFFPSJ U7K2teAvqxE8gTXysQroJ+pn7Z8q1ImJ6+EkF+rJzxxIaJdAVaEg57wexFd1D9QDPOM4ay t5apW7bI4CFR24fO3KS4BHGoqGMsw8F0a1P8+X1HDqvBU+guQ4zX3pDSQAqE6ikVN3W7/6 lndwdg816JOANjiRw6NRE/STvrymbx0J4zEbd44TexrRnmDRlI1HKKGSa5uqQPtxt/cL4/ ZRMA6mw/AOvtpWm07jxBiNoOq/ZEunP2/VWG1bxbtY2495SDK+2jOXRvI0lkzw== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1647295951; a=rsa-sha256; cv=none; b=DvVCKUGlHtyh09KDypwQ91n0cquf6B9S66y7/1nsFTzHyXHsIci2r4jEP3L0hvUn61BgLE jUbZE2MhPFSZ/DyZHEBo7+J1xYjDQndkOKvmz8RNRCebtjuxlDN82ypz8sFa0XsKIFIOUO MOPH/5Yo6CF8z+dQRPdKXefsgU9Cv1/pKxOZ4lzzK+fXUKui1sv3LJvt9Xj+OlIry2+6+U 0MrE5dgQsY7Wi1CqS986iRm/VN8Y2VgyBeomTgn9m/6h+2zjmH95fcN9/fiLVcBNt9kWt3 wfMIxC7gdjPA3BVXkLZ+0+KV5IUE5ZUnpqqT6H8iCa9t069oUyECVKbK8TtOug== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=messagingengine.com header.s=fm2 header.b=e3TEoCvC; 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-Spam-Score: 0.93 Authentication-Results: aspmx1.migadu.com; dkim=fail ("headers rsa verify failed") header.d=messagingengine.com header.s=fm2 header.b=e3TEoCvC; 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-Queue-Id: 9ABEB3D0E2 X-Spam-Score: 0.93 X-Migadu-Scanner: scn0.migadu.com X-TUID: c6nBFlzApe7L A snapshot of the guix repository is similar to a snapshot of Google's "google3" monorepo. It differs, in that rather than containing the full source of a specific version of every software package, it encodes instructions on how to obtain and build a specific version of each package. This has some tradeoffs; the size of Guix's repo is greatly reduced, and it is easier for Guix to import new packages by simply wrapping the build systems they already use, rather than re-implementing the build logic with blaze/bazel. On the other hand, the decentralized nature makes it hard for any one actor to make a breaking change. At Google, if you want to make a breaking change in a library, you can update all the users of that library in the same commit. I think that this feature is actually overrated, because it is often complicated by a need to preserve the ability to roll back a release. With guix, I know that I am able to build every package in the distribution, and I don't need to lookup how to use cmake or bazel or ninja or meson or dune or whatever the author decided to use. I don't have to figure out how to obtain and build the right versions of C libraries that a package links to. I just use `guix build`. I think that is a wonderful thing. Conversely, I am also free to use any build system that's implemented in guix/build-systems. I think guix could also greatly lower the barrier to contributing to free software projects. Since a guix package typically encodes * How to obtain the software * How to build the software * (usually) how to test the software * (usually) its source repository One could develop a `guix contribute ` subcommand or standalone script that would implement the following workflow: 1. Obtain the source and unpack it into a writable working directory, skipping downstream patches and snippets. 2. Drop the user into a shell with the build and test inputs present. Perhaps with the scripts $PWD/.guix/test and $PWD/.guix/build added to run the build and test actions as needed. 3. After the user has made changes, and maybe signalled completion somehow, run the tests and build all outputs. 4. Once the user exits, output a diff that's suitable for git send-email. I recently used guix to make a one-line change to the dovecot-pigeonhole package. Initially I tried to do this without guix, and had difficulties using autoconf/automake. So instead, I made my changes, captured them with `git diff`, and then used the `--with-patch` option of `guix install` to build and install the modified version. It wasn't too hard, but it could have been easier. It may have not been worth the effort in this case for someone new to guix, but the nice thing is I could take the same steps to modify any piece of free software for which a guix package exists, regardless of the build system in use. David