From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id mBGKOiKh3V+PcQAA0tVLHw (envelope-from ) for ; Sat, 19 Dec 2020 06:43:46 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id MCdANiKh3V/tQQAAbx9fmQ (envelope-from ) for ; Sat, 19 Dec 2020 06:43:46 +0000 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 6741E940355 for ; Sat, 19 Dec 2020 06:43:46 +0000 (UTC) Received: from localhost ([::1]:34726 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kqVxx-0001zB-5g for larch@yhetil.org; Sat, 19 Dec 2020 01:43:45 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:49216) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kqVwu-0001bu-D2 for guix-devel@gnu.org; Sat, 19 Dec 2020 01:42:40 -0500 Received: from mail.thebird.nl ([94.142.245.5]:43626) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kqVwr-0007HP-Jh for guix-devel@gnu.org; Sat, 19 Dec 2020 01:42:39 -0500 Received: by mail.thebird.nl (Postfix, from userid 1000) id D52BBECA7; Sat, 19 Dec 2020 07:42:32 +0100 (CET) Date: Sat, 19 Dec 2020 07:42:32 +0100 From: Pjotr Prins To: Hartmut Goebel Subject: Re: Discussion: How to package rust crates now and in future? Message-ID: <20201219064232.4ioar4776lxh6wm6@thebird.nl> References: <87tuskmq7l.fsf@nicolasgoaziou.fr> <995a1d66-1c65-15fd-ea61-669e2160bc71@crazy-compilers.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <995a1d66-1c65-15fd-ea61-669e2160bc71@crazy-compilers.com> User-Agent: NeoMutt/20170113 (1.7.2) Received-SPF: pass client-ip=94.142.245.5; envelope-from=pjotr2020@thebird.nl; helo=mail.thebird.nl 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 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.23 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 , Nicolas Goaziou Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: "Guix-devel" X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: -1.32 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-devel-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-devel-bounces@gnu.org X-Migadu-Queue-Id: 6741E940355 X-Spam-Score: -1.32 X-Migadu-Scanner: scn0.migadu.com X-TUID: kz42Zgm5OXBF Hi Hartmut, We are using Rust from Guix and just a few comments/thoughts: On Fri, Dec 18, 2020 at 07:08:24PM +0100, Hartmut Goebel wrote: > Hi, > > I suggest to discuss this with a broader community. > > TIL: Shall rust packages be packaged with #:skip-build #t? Shall tests > be run for all crates? > > My vote: skip-build #t, no tests > > Background: I just submitted some patches for some crates, setting > #:skip-build for those I touched or added. My rational: > > 1) Building crate "libraries" is of no use. Rust still has no notion of > "libraries", neither shared not static. it does not even provide any > means to use "object"-files from another package. All crates will be > build again and again for each package using it. And you will notice > that the output of most crates will be almost empty (only exception: if > the crate build a program). You probably know this, but for the benefit of others: Rust builds static binaries from source. That is their 'philosophy', see https://rust-cli.github.io/book/tutorial/packaging.html This goes against the grain of Unix shared libraries. Building all crates is what Rust does. Correct me if I am wrong. They are talking about librification of the language https://rust-lang.github.io/compiler-team/minutes/design-meeting/2020-03-12-shared-library-for-types/ which may lead to a wider idea of libraries. > 2) This is what the crates importer does: It sets skip-build for all > packages it imports as dependencies. It also does not add the > crate-build-dependencies for these packages. (Please note that while I > made the crates importer to honor semver versions, this has already > been prepared in other patches and was not argued about. > > Am 17.12.20 um 21:08 schrieb Efraim Flashner: > > I'm in favor of building the packages anyway, it serves as a check that > the inputs are actually correct. > > When I started packaging crates, I did this too. But then I learned, > that others do not. So we should define how this should be handled in > the future - and adjust the importer accordingly. > > This might not be possible - as there is another issue in the Rust > ecosystem: The language is still moving fast. > > 3) If some packages requires rustc 1.46, while our default rustc is > still 1.40, we need to add rustc-1.46 as an input to this package and > to many of it's dependents. (AFAIR the package will even depend on > *both* version then.) Now if we move on to rustc 1.50, extra care has > to be taken to remove these dependencies. > > Even worse: All packages depending on such a package on will also > depend on rustc 1.46, and all changes to rustc 1.46 will trigger a > rebuild - without *any* use. The language may still be changing - but I think it has gotten to the point that they can't change too much without hurting large software projects. It probably is a bad idea to mix different compilers to build crates in one software stack. Maybe I am misreading your idea, but we either have a 1.40 build or a 1.46 build. > 4) Since (2) building rust packages costs *a lot* of resources: time, > memory and electrical power. As an example, building sequoia takes > about 20 Minutes on my machine. Most of the time is spend compiling > dependencies of dependencies. And all these dependencies of > dependencies will be compiled over and over again. > > 5) *If* we decide to build dependencies, we should restrict this to > *one* build. This means: either not run the tests or only do a test > build. The reason is: When running the tests, all the code, including > the dependencies, is compiled again with some "test" flag set. This > will add yet another huge amount of time, memory and electrical power. > > To give you some figure: A release and test build for sequoia takes > about 45 minutes on my machine, requiring 9 GB of space in /tmp. So > this is double the time if the release build only. > > I can't imaging how many hours it would take to rebuild sequoia is one > of the lower level dependencies changes - which is quite often the case > in rust. > > 6) This not only effect berlin, but also every user out there requiring > a rebuild for some reason. This will lead to a very, very bad user > experience - practically kicking out users with less powerful > equipment. The Rust user experience is that Rust builds all crates or installs a single (static) binary. Even for Guix developers, the default is to use cargo because of the insane number of dependencies it typically pulls in. We package dependencies when we want to deploy, not to develop. The user here is a guix user, of course. So between compiler versions we rebuild the stack and then distribute binaries. No rebuilds get triggered normally. I think the use case you are referring to is users as developers (right?) who are actually used to waiting for cargo. I wait for cargo when I start a new Guix development environment. Still, it is a relief that cargo does not distribute binaries. They have not gotten there yet :) > 7) Given the rushing climate crisis, we MUST NOT waste this gigantic > amount of electrical power. We are in a position of huge impact. If we > decide to save power, hundreds of Guix users will save power (and > money). If we decide to waste power, this will multiply by the number > of Guix users. > > It's our responsibility to protect the earth! Yes to #:skip-build #t. It is. I said so years ago for the insane time we wait for tests to pass with many packages. I think a super fast build/deploy system for Rust would be fantastic and an *advertisement* for Rust developers to opt for Guix instead of them rolling out their own solutions. So, if we can come up with a solution that is not contrarian to the philosophy of Guix I am all for that!! Pj.