From nobody Mon Jan 15 02:10:27 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TCwbB3DMYz57K03 for ; Mon, 15 Jan 2024 02:10:30 +0000 (UTC) (envelope-from leres@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TCwbB2jQWz4tdj; Mon, 15 Jan 2024 02:10:30 +0000 (UTC) (envelope-from leres@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705284630; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wQ3MnhRKvEjBgy92UfzTFtlmsphD5VAzyD3jLpYk1BI=; b=S6TlAT3KKrfQuUj3xiAsZ8ijMVBqjc3iVCZAAdPZsxP9ejyO4kQuCEwsOGtXO6aoFsRmMQ 5opMryGCu8k0CcKqz2SVe8rDmH0MCKQ7U0hR3gIs3OeoI9apX0elxc8a76KlYAI7zyd9T8 tbmt+k048r6bEAWQ+EjmPsgi/G0opZegtkRiQQZPYuT3sA3eEifqynmhcL05ll0lK231oD 2TMYgBgN/GlS2vMvwE+ygiuXvQ0D7QWlAGnq/bvCot/b/NmLnESn1PJX8TMTSYLAAJUDTR uD/eUgByjMn3AYDQNw5DRL0jV+kNDfConIKgEZv4lUhKUgBNGi2sTsh4XNVq9g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705284630; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=wQ3MnhRKvEjBgy92UfzTFtlmsphD5VAzyD3jLpYk1BI=; b=KV1ptNz1k0B9HlgTtqoH+1ajYSP7fH+7kKNGa0z5YzRtJqM00yyHAKSMguO54fIGePxKBz 6dV2qePRemwQCr0y1DybKw+suG1wciUpu+bQT/9JnaSEo+0CtFdSM0RPS0/o9PNMJE9A6O LhP3Tl36pTZgTvhu2n0prObgzuee/6H7qx1+7KdVKWBSfdFToXxHswDpX3riqzHjlJ5l9P M3YqgL6qjynanizXyZyBt/96+j3dxi8sZ11pKdObYmz5tUXAPInKUVTARXP6vMzqiGyqzY bCzg75bB0TCxmD+CVRC32f6yOsX7QXVZY4ng0CNYEo4rdbQ8MAMQGB3RaRm6jQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705284630; a=rsa-sha256; cv=none; b=gx7J6jCl3ir8Y9+8hBSIJa5UlB4mVNonY4YbzDGoOeNilUn6BxkNZQ2+Nu8BL9mWVTAx3u fzKpwwm+f2xAy7meeDuqgWtjC3dVxXMAioIB9SmeHINmGvzYaOXz2gEM+eUNK+QzoPVJjs xEEEYdVxncvBNL7O1nBNNl29qDlO0Im+6uDE42pQGsSNmwBjh4wLR1czH3NnLJbF3U0mnl iZA9B6k2Sr0Hubth+gGaaFzOQ42GuZ+kBa+4DexDvzyiZ85iDg6DS1Ct1ufNlM1W9p5VTU bYGRIqEB0EbR7BQVoNdrin+TY6d0mruMJQUDUYH9sFfJosZ5qcFxZ+yECRPEXA== Received: from [IPV6:fd:1965::2] (unknown [IPv6:2600:1700:ab1b:6800:2e0:edff:fece:8f27]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: leres) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TCwb96N90z1Gm7; Mon, 15 Jan 2024 02:10:29 +0000 (UTC) (envelope-from leres@freebsd.org) Message-ID: <0fb25c17-c737-4bc6-966c-6a03d0a41669@freebsd.org> Date: Sun, 14 Jan 2024 18:10:27 -0800 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: poudriere 3.4.0 regression: -i runs as NON_ROOT user Content-Language: en-US To: Tomoaki AOKI Cc: freebsd-hackers@freebsd.org References: <0b1ea9f1-4ed6-42c9-af21-844da9fb5c63@freebsd.org> <20240115070717.90a337c666aaa86003e7c231@dec.sakura.ne.jp> From: Craig Leres In-Reply-To: <20240115070717.90a337c666aaa86003e7c231@dec.sakura.ne.jp> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 1/14/24 14:07, Tomoaki AOKI wrote: > IIRC, poudriere[-devel] ran as nobody (65534) initially, but it started > running as root (0) when I started using ccache. Interesting. It's starting to sound to me as if there's just one bug; poudriere is not passing the correct value for UID to make. I commented out CCACHE_DIR in my poudriere.conf and indeed things run as user nobody. But looking at the build log I see UID is set to 0 in the environment. And I don't understand how poudriere does this ("ps e" doesn't show UID in the environment of any jail process). Craig ---Begin Environment--- SHELL=/bin/csh [...] UID=0 [...] From nobody Mon Jan 15 04:11:02 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TCzGb1dhsz57Z6F for ; Mon, 15 Jan 2024 04:11:19 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic307-8.consmr.mail.gq1.yahoo.com (sonic307-8.consmr.mail.gq1.yahoo.com [98.137.64.32]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TCzGY6z5qz4GQt for ; Mon, 15 Jan 2024 04:11:17 +0000 (UTC) (envelope-from marklmi@yahoo.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=yahoo.com header.s=s2048 header.b=ECmMmsyx; dmarc=pass (policy=reject) header.from=yahoo.com; spf=pass (mx1.freebsd.org: domain of marklmi@yahoo.com designates 98.137.64.32 as permitted sender) smtp.mailfrom=marklmi@yahoo.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1705291875; bh=E8x2VRgW9nVcg4hK/WmvlSEfKy4svsfOUkVuYU0Tscc=; h=From:Subject:Date:To:References:From:Subject:Reply-To; b=ECmMmsyxyl7l63ILldDZNRRR31kTPngfLgTAQHtZkYoNHGe3O60T6qiA9mDVF0MJ16Nx/BaWbq2Mov2mFAKTnyMwUwbpPO4hSTiUOJRaE1SfwKIaS5M0oqMK4W61EgP7RzMtpxa7jgpfQ7ivs/+hIccU4KzSijI5wwiNP9X6/bdxfd/GKlWpgy/Vanz4ykfrVsZyKEmn3vzd/JqTS21GTM5JZg/vff9xM26Cx/2sLxmOwiwi/V8QneSHXk1EgW11sWOA/RD2oonQld753rNyKUxZ3xB3f7CGOIF0UamV2w5gWt5m6g6khyAro/l/R5/Ln62s8TLwXOqupA/AWw7Epg== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1705291875; bh=yMW5cG3iCUlGDwyJU4QKEAcQB4Rm/d0Xd39vlRA1wWL=; h=X-Sonic-MF:From:Subject:Date:To:From:Subject; b=Y9Efo8PjoQrDFUw2XTZOOibigavqXaqEYQchz68/5NhwTmvceaeT80UKH08u3Kycb2FwRl1TF6lqp/POilW3SVBZ7IRqqFzPFN4wjabB2xtsl585mCva0Ye3EDBquX04BQYvexsD9P5RMwrMo2HprdqfZojA2973R+y5/lN3yg/uE73N8pviXrgTAWPMr4sYO1c5yAe9ICLpcEAd7o445AId03DrA/LJQQ04ARTG2QuyzfklQIQgU/+0Qr6pfdp+IsGIw4ecAXIi+vbm9V+J9AEF5mWz310Uk3u26sXRNjDTA+3hj6L398LTVF5xZ/rB0HqmwWi0Cs+OwPsB6Bl6Ag== X-YMail-OSG: 3tMuD2kVM1n7IiFbF5goXO1t28pCGxBG_jCrzzWMtpZLe9fpd4aZu2J8n3ZHb7x .ptw5kdbdd2WjYhQQjM7U1YvjC04I4zFeMnrmXWFhpjL.YYRoMCdBL4JkQnmBMYa.unvDNtJT8.y MZUfPuO6Cu4UQPCg2_OYbfqnxJC4P_FYhhMPifJwv0kijKcuq5MlC2MeKGNmcfzrpsMW7X2KngGg veJsXNfCrdPG2j7RQc.7zTWN7ew3dLWzn0ckySgGLkm7lHjuvVgslUdFVqWouea3md_SdwTvXHdc NYdLYlL_aVPBIbYxEiqZDn1j_LhzFWXQBDBdfuSkaz_JTZHKR9C5xBHPK4MX.GAdfhdQDXiedNRV UiPBiJn6yiHYynh2WPde1fa4TOZW7S7fClc.ZEKEosU.1avV1bw9bvtIDlBTy2Z9y15qGQg6_pcy a6XyEsW.VWJ3HlIKE8M2q94YwcdmbvgPThxz7arLfeFLkUAu0e0khF6D6dqzNNWBPq_.TnTfvDGr vbYyWz.pAiHpoc8BiOzfTcNsgnhMB.FR9obDJCTDuMZhwUe41lxzDx3ejugjYlNrVhUieWu4MXsS RfzNlWs2S8AFJJJn1XsySxMLt5eqj_jQit26BnWBjddACQNMI3DeXwfxvrHsgf_SecsEEDqtxbwg pSEDTyEdVpd_4vGiJhwsWilbDvSy1Eq2BzR_O_czcPygBVonbfExFOHr9UMpSzBO5Jf9bnPfv8yJ sw4zXCTysXzATfNHFKhzIqqUt969XHNU.Q.482Rk5eK_.jsdV47V89w6EoYlHJ73i82e1Boqrqc4 33WbG9XejDH78CyqoZ1RBmQ7lEJ7wU9PqMyBFujcPHGXWzRyrDycd_mmfdIfWsbhK6YfMuWoWeEx iW64P3kbydqVCecdMy_52LJjXRHNx1Oaq6BE5EbICW3wE4k6tIJSo_TLlma579Le9PkRqp6OExsP Y79AWtPzO6g1aX8lKD1PJ.AFP946yFnPzVumzOysGC0FfyG5WsoF754nR0sqmWzCn68hEC3f8EiF K_AlHN49FPPAGZpRxWF9PUiY6hyUbKNEoJtjGka6yUthO6qONSJU0Te0hgk1zet8fMpJHZxhLvfW TL5cwooqpJAAwOiDSqD3iPPVu.FZrnxaHKpnUtrpImSA9VVPxgJvPUToeSry0HPufT9wrD_OMqCp wZZUA9Li.GxQAZyCIoJED2We6FvjtbFy8_LIVAPf9Uw8HckP5AyuAHZ9UInZ.Z8GnHCqdqnpWqh3 NKvG1gfF8BTA0oKPCBqOoUZxe0MDcTQPpS7d7pjKi6APqp5ju9mdmlTJJj8_CkVbjD.gn7nLOErx .adrs8awfJth6YdUGbWPo0mne.OShKek0u9PHcx4axiZTXcVj6GqA.BVkLxOSNqXb5q.XLxRiN8X cmNGsGdoKQpM8EUFlflPKYWJ_7.xsJWaOKZ24H09cWwUmrRqJ3xlyAl4.KqKB3UA5uG5wsbosLLf WXmfL0SyzVgmaRZL1X5s.rgjHupivylEM00gQ6_arxgTvIE9DH.TBJEkopGLlU7ubitevcJ3TrnD tELB.MfGkVDe.gYGxl.ZIqCTvrgQ8CwnC0VcuOvcwRfTIHiXGBJTsHLMJuRwxp_G9THXdw7AFhUb lQ9cA0u8jKpkV27ZNXOFmCa2DyD5Fiap7Oxknj4tBDCndK0V7zjBemn49qN5lu3hYkawO41bASEZ Zk_eQrOSIM4eDbVHAo1d7siInUkprD1ZK9nnTr_3g3Ogupvd7vuD8MMRiC0sCWZRTay9j99wU22B 6ZArkc6ppqQIfk3asL4n7b0Qzo.XSyP15A68tPgwc1UJ7UYtKRBO1eJn.uJhy6qZl2FiCMjFxCSo d4e3yPF7vz6Fo7dj7hXCLjQ_o8wCi93cg9pE_T06g44Ni0AuigPs5l01klYcYO61l8btjWM3z.BR kLOemjL1Z1UZzuhPfaj7jKsmFqgs_Z5pZfXXJkusEw_7Q6PIHR4c0i6xjlo4G4IQaJP4x1OB_ueP jV7QZ5C5iSfD0h1ttx0FquPV5UqD30gamvSjovt8JuBoVqUHeYehBB_MoHB_M6uquwDo81U5GBb4 ZJjVCtDhyTGghD.xSfVBynqlrhZNWVxduqHen_fKQq4y9GI5dX7iaobxghXOzsbvvSQhEwX2BbbN 03iN4sniRGrFFn9d_orPgPnD2wqP7Pp5iJ74nnH.Pno0RSm8sryb2qoPW9_ZCndwVjCjQY1R8kp5 _6C9fIIA8Y6256QAg31cCwU4IHuZCViMQ568XIZohs63bBB1uN5ouSpAC3.ml1W1.y1DNp06N1A- - X-Sonic-MF: X-Sonic-ID: 44561aeb-89b3-459a-818a-98dfb1cb5982 Received: from sonic.gate.mail.ne1.yahoo.com by sonic307.consmr.mail.gq1.yahoo.com with HTTP; Mon, 15 Jan 2024 04:11:15 +0000 Received: by hermes--production-gq1-78d49cd6df-wz9pk (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID 5e426d026906b7d913988b25a37308dd; Mon, 15 Jan 2024 04:11:13 +0000 (UTC) From: Mark Millard Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: Re: poudriere 3.4.0 regression: -i runs as NON_ROOT user Message-Id: <6376FF7E-6F3B-4558-94D0-4F5A4C82B916@yahoo.com> Date: Sun, 14 Jan 2024 20:11:02 -0800 To: leres@freebsd.org, FreeBSD Hackers X-Mailer: Apple Mail (2.3774.300.61.1.2) References: <6376FF7E-6F3B-4558-94D0-4F5A4C82B916.ref@yahoo.com> X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.50 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-0.999]; MV_CASE(0.50)[]; DMARC_POLICY_ALLOW(-0.50)[yahoo.com,reject]; R_SPF_ALLOW(-0.20)[+ptr:yahoo.com]; R_DKIM_ALLOW(-0.20)[yahoo.com:s=s2048]; MIME_GOOD(-0.10)[text/plain]; RCPT_COUNT_TWO(0.00)[2]; RCVD_TLS_LAST(0.00)[]; MIME_TRACE(0.00)[0:+]; TO_DN_SOME(0.00)[]; ARC_NA(0.00)[]; DWL_DNSWL_NONE(0.00)[yahoo.com:dkim]; FREEMAIL_FROM(0.00)[yahoo.com]; FROM_HAS_DN(0.00)[]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/20, country:US]; FREEMAIL_ENVFROM(0.00)[yahoo.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[yahoo.com:+]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; RWL_MAILSPIKE_POSSIBLE(0.00)[98.137.64.32:from]; MID_RHS_MATCH_FROM(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[98.137.64.32:from] X-Rspamd-Queue-Id: 4TCzGY6z5qz4GQt Craig Leres wrote on Date: Mon, 15 Jan 2024 02:10:27 UTC : > On 1/14/24 14:07, Tomoaki AOKI wrote: > > IIRC, poudriere[-devel] ran as nobody (65534) initially, but it = started > > running as root (0) when I started using ccache. >=20 > Interesting. It's starting to sound to me as if there's just one bug;=20= > poudriere is not passing the correct value for UID to make. >=20 > I commented out CCACHE_DIR in my poudriere.conf and indeed things run = as=20 > user nobody. But looking at the build log I see UID is set to 0 in the=20= > environment. And I don't understand how poudriere does this ("ps e"=20 > doesn't show UID in the environment of any jail process). Looking in /usr/local/etc/poudriere.conf.sample I see: # Define to yes to build and stage as a regular user # Default: yes, unless CCACHE_DIR is set and CCACHE_DIR_NON_ROOT_SAFE is = not # set. Note that to use ccache with BUILD_AS_NON_ROOT you will need to # use a non-shared CCACHE_DIR that is only built by PORTBUILD_USER and = chowned # to that user. Then set CCACHE_DIR_NON_ROOT_SAFE to yes. #BUILD_AS_NON_ROOT=3Dno =3D=3D=3D Mark Millard marklmi at yahoo.com From nobody Mon Jan 15 04:54:05 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TD0DW0nhkz57f04 for ; Mon, 15 Jan 2024 04:54:35 +0000 (UTC) (envelope-from 6yearold@gmail.com) Received: from mail-ua1-f44.google.com (mail-ua1-f44.google.com [209.85.222.44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TD0DV52nsz4N1K; Mon, 15 Jan 2024 04:54:34 +0000 (UTC) (envelope-from 6yearold@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ua1-f44.google.com with SMTP id a1e0cc1a2514c-7d1921f440bso45289241.0; Sun, 14 Jan 2024 20:54:34 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705294473; x=1705899273; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sYKMvdqVRB6LgwzUL4Y3YgvsWCUfUKU5YGizpXomnLo=; b=IeD57z0gEnc7dPSikWabHTVVmsJvC1QkXssT277GzUhiRxwyutlnt1n9j5M3CPYInM 3Bf2FtTktsSn26PrCabsc4YOYELXxokO5PFRAJMLNLy8Oz8pNBgDLhOakxeHcfpPQSB5 b3BqpljgObxDG8kMQfxPt08Cizd6HPHS+Kmq2OFDe/f03SzLxDZegoIemA5Q24XyP5gy bthWeQmkCpzaJHI5TevJuEd+Rp9tEf/cnooxwYsD2M7RPFwrb3p0SZOCfYnc4GG1Q9Zx LW8l9+kt1lXLasOMVCP8AKMSDcyTGPufziBdPwm50sfv/yRnD5x2GH80bdMT5dnoYwmG g32A== X-Gm-Message-State: AOJu0YxSw+/aRFKtzApDTUfgE2j/SxC6TFIyHDTZbiOmJi+eI0WIgywW W1WFvDE85/H2dhFqcC2qs8CMxZyGX78= X-Google-Smtp-Source: AGHT+IF3u+FI/TT6EOlg+oQ9azjJJlBnXIVRPlXIpy1RSzGCiUnW5qXsWqXmIHB/+fQCuj4y4wdM+g== X-Received: by 2002:a67:c40c:0:b0:467:c80e:49d1 with SMTP id c12-20020a67c40c000000b00467c80e49d1mr2870257vsk.66.1705294472897; Sun, 14 Jan 2024 20:54:32 -0800 (PST) Received: from mail-ua1-f49.google.com (mail-ua1-f49.google.com. [209.85.222.49]) by smtp.gmail.com with ESMTPSA id dd2-20020a056102568200b00468360ec31bsm362326vsb.22.2024.01.14.20.54.32 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 14 Jan 2024 20:54:32 -0800 (PST) Received: by mail-ua1-f49.google.com with SMTP id a1e0cc1a2514c-7d1921f440bso45286241.0; Sun, 14 Jan 2024 20:54:32 -0800 (PST) X-Received: by 2002:a05:6102:a81:b0:469:4f36:ddd6 with SMTP id n1-20020a0561020a8100b004694f36ddd6mr687726vsg.26.1705294472469; Sun, 14 Jan 2024 20:54:32 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <0b1ea9f1-4ed6-42c9-af21-844da9fb5c63@freebsd.org> <20240115070717.90a337c666aaa86003e7c231@dec.sakura.ne.jp> <0fb25c17-c737-4bc6-966c-6a03d0a41669@freebsd.org> In-Reply-To: <0fb25c17-c737-4bc6-966c-6a03d0a41669@freebsd.org> From: Gleb Popov Date: Mon, 15 Jan 2024 07:54:05 +0300 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: poudriere 3.4.0 regression: -i runs as NON_ROOT user To: Craig Leres Cc: freebsd-hackers@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TD0DV52nsz4N1K X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Mon, Jan 15, 2024 at 5:10=E2=80=AFAM Craig Leres wro= te: > > On 1/14/24 14:07, Tomoaki AOKI wrote: > > IIRC, poudriere[-devel] ran as nobody (65534) initially, but it started > > running as root (0) when I started using ccache. > > Interesting. It's starting to sound to me as if there's just one bug; > poudriere is not passing the correct value for UID to make. > > I commented out CCACHE_DIR in my poudriere.conf and indeed things run as > user nobody. Yes, this is documented in the config: https://github.com/freebsd/poudriere/blob/acde697efbe6f857c9b00bc90737dd2d9= 7c95ba5/src/etc/poudriere.conf.sample#L287 > But looking at the build log I see UID is set to 0 in the > environment. And I don't understand how poudriere does this ("ps e" > doesn't show UID in the environment of any jail process). > > Craig > > ---Begin Environment--- > SHELL=3D/bin/csh > [...] > UID=3D0 > [...] > "Begin Environment" is the environment that Poudriere itself was started in, the host one. Also note that when you do "testport -i" and get into the jail, you'll be given root even if nobody was used during building. From nobody Mon Jan 15 15:59:33 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDH0Z2Kpjz57Dp0; Mon, 15 Jan 2024 16:00:14 +0000 (UTC) (envelope-from marietto2008@gmail.com) Received: from mail-lf1-x130.google.com (mail-lf1-x130.google.com [IPv6:2a00:1450:4864:20::130]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDH0Y1T0Nz50Bt; Mon, 15 Jan 2024 16:00:13 +0000 (UTC) (envelope-from marietto2008@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b="To6Aw/Nt"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of marietto2008@gmail.com designates 2a00:1450:4864:20::130 as permitted sender) smtp.mailfrom=marietto2008@gmail.com Received: by mail-lf1-x130.google.com with SMTP id 2adb3069b0e04-50e7e55c0f6so10657788e87.0; Mon, 15 Jan 2024 08:00:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705334411; x=1705939211; darn=freebsd.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=MeN2YCNifzym6P3vO8NigRCG1X6V+r2EXdCsH9Ap1M4=; b=To6Aw/NtU90M+/gvfoqZkEmBCEmnSXm1rOBUDrPodFQFzyAFRwBKVYrTotr7Ixqy9x zG2kpVwuX7oXPT8jobVsi3iixPlp8GhwmX2BSeq5XumCP4HQJED1pQpUzDvkWt7GuTWg 684w6RLnEMt4d4W4M2MfTFbayr8jwYYEiEq0RSItR+udRe7Ic8GNzXaMdvrpUEUIjOEy lBRNADBADdU1u+YfPkpKvz/8JlBSn4vNZqjAH1fzpYD0HCxfV+i9bkxDzadCOioX2p9y UnN39XImo9sojclWevskXkUO7bex3e1sIt9uAvcdGRs+28wbO9CPUqHGLurJKE+zspqr oyZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705334411; x=1705939211; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=MeN2YCNifzym6P3vO8NigRCG1X6V+r2EXdCsH9Ap1M4=; b=myWCD2bl+Abvs5hf7KC9TaxkJ2vb1iJ3uIhXPGV1z9H9gwIvKrKdb85zUdP1ZVchJy vENYgBvEcPngqievcy9mSF+ccZsTKtR5jW1LBlHMLOdsXl47LGoQlRWB31dvCDxlTqWJ MMXBH0a5F7sV25l4hk8miN/5HliOjI7EVcmzGdV2r/I44+Nq1Nu7O1GiQutW1e5/oaMC bk38q225Sd4a99JTV4JYsY7aHz8SWhsj4/ozWB1FV3AaPMLcj/mFF4Ms2Mf0hPJ6AkCd PlRlQuWhd/xc0g7Btu5q7o1iQEU6GzxKRZIDaPDzzPyha78M4kQl355LzxBLfV6unnI1 ybjg== X-Gm-Message-State: AOJu0Yy6IUPycmNCo5QIOucOrU9fziZZOspmRRqBvg0aXlYA+MlhJf05 rxPBLL3IL3uwLXIl2rWsP8I0r0o9qv+0gBwXMo/T6c1pUVo= X-Google-Smtp-Source: AGHT+IF6Ch2abOmJVMbYH1Yw/59ZM8VbnCqGjyKn9R5rFUjXsct93Oh/It8rp2tCPMWoJdOuR33wSjVw+U/Y8SkSYeg= X-Received: by 2002:a05:6512:3d8d:b0:50e:84ad:3e29 with SMTP id k13-20020a0565123d8d00b0050e84ad3e29mr1675580lfv.136.1705334410138; Mon, 15 Jan 2024 08:00:10 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 From: Mario Marietto Date: Mon, 15 Jan 2024 16:59:33 +0100 Message-ID: Subject: How to upgrade an EOL FreeBSD release or how to make it working again To: freebsd-arm , freebsd-hackers , FreeBSD Mailing List , freebsd-xen@freebsd.org, FreeBSD Current , Warner Losh , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/related; boundary="000000000000be129d060efe1b1a" X-Spamd-Bar: --- X-Spamd-Result: default: False [-4.00 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36:c]; MIME_GOOD(-0.10)[multipart/related,multipart/alternative,text/plain]; MISSING_XM_UA(0.00)[]; ARC_NA(0.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_COUNT_ONE(0.00)[1]; FREEMAIL_ENVFROM(0.00)[gmail.com]; FREEMAIL_FROM(0.00)[gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~,4:~]; TO_DN_SOME(0.00)[]; RCPT_COUNT_SEVEN(0.00)[7]; MLMMJ_DEST(0.00)[freebsd-arm@freebsd.org,freebsd-hackers@freebsd.org,freebsd-questions@freebsd.org,freebsd-xen@freebsd.org,freebsd-current@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::130:from]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_TLS_LAST(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; MID_RHS_MATCH_FROMTLD(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+] X-Rspamd-Queue-Id: 4TDH0Y1T0Nz50Bt --000000000000be129d060efe1b1a Content-Type: multipart/alternative; boundary="000000000000be129c060efe1b19" --000000000000be129c060efe1b19 Content-Type: text/plain; charset="UTF-8" Hello to everyone. I'm trying to install FreeBSD 14 natively on my ARM Chromebook model xe303c12 ; I've found only one tutorial that teaches how to do that,that's it : https://wiki.freebsd.org/arm/Chromebook The problem is that it ends with the installation of FreeBSD 11,that's very EOL. I can't use it as is. I need to upgrade it to 14 (but I'm on arm 32 bit,that's TIER-2,so I can't upgrade it automatically using the freebsd-update script. It is also true that I can't install 14 directly on that machine,as you can read below : [image: unnamed.png] I've looked all around and I found the tool pkgbase,that I'm talking about on the FreeBSD forum,to understand if it allows the 11 to be usable or upgradable. It does not seem to be the proper tool to achieve my goal. Do you have any suggestions that can help me ? Thanks. -- Mario. --000000000000be129c060efe1b19 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello to everyone.

I'm t= rying to install FreeBSD 14 natively on my ARM Chromebook model xe303c12 ; = I've found only one tutorial that teaches how to do that,that's it = :


Th= e problem is that it ends with the installation of FreeBSD 11,that's ve= ry EOL.
I can't use it as is. I need to upgrade it to 14 (but= I'm on arm 32 bit,that's TIER-2,so I can't upgrade it automati= cally using the freebsd-update script. It is also true that I can't ins= tall 14 directly on that machine,as you can read below :


3D"unnamed.png"

I've looked all= around and I found the tool pkgbase,that I'm talking about on the Free= BSD forum,to understand if it allows the 11 to be usable or upgradable. It = does not seem to be the proper tool to achieve my goal. Do you have any sug= gestions that can help me ? Thanks.

--
Mario.
--000000000000be129c060efe1b19-- --000000000000be129d060efe1b1a Content-Type: image/png; name="unnamed.png" Content-Disposition: inline; filename="unnamed.png" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: ii_lrf3zpy30 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 --000000000000be129d060efe1b1a-- From nobody Mon Jan 15 16:46:43 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDJ303kdnz574q2; Mon, 15 Jan 2024 16:47:24 +0000 (UTC) (envelope-from marietto2008@gmail.com) Received: from mail-ej1-x636.google.com (mail-ej1-x636.google.com [IPv6:2a00:1450:4864:20::636]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDJ301kplz40N2; Mon, 15 Jan 2024 16:47:24 +0000 (UTC) (envelope-from marietto2008@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-a29c4bbb2f4so928555866b.1; Mon, 15 Jan 2024 08:47:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705337241; x=1705942041; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6W/sfaPgUB5Zb93I5DLXs9+X5ngdj8yI5OJRtLAAgYI=; b=DkHy/0rxMcI4KKzaS37FbAqZBw7n1yG8WdQbVdtALPUWAIZkUiLoHDYlXSa1FrDMH/ zdTMHW3M7FGUoAQFgf4XewKjo5q2S4PtWVF3E8/NYf16t8U1+j5mquS0QNQ08s1tislE xowMd26slfKwfFbLhoSNy+bvGfckmMPk/3lpRDkTlKdOi79nJNDMjaf4bF6AtkR3Puiu G4pjDFK0je//c0zHessOylbOMcEuTjiV2SNnR6pZ+YJOP0+AxLfyNRSo8M9R7Lj+YuoX A2vonJ0bV5XX34VBT26C12mT4nPnf+Luav82bKK4L9lqQnYaaNcB5wW2/u0rpLq/Scbq 9/Zg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705337241; x=1705942041; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6W/sfaPgUB5Zb93I5DLXs9+X5ngdj8yI5OJRtLAAgYI=; b=ceWlndzJBcHrSnrvvNawDFDbgbSuXznaMHiF/DCiUGgwx1tr/ge81Kzub1LH2j/7H7 YuV3u119btwCNSkQQb7H1Y4VtyXThI8m8ell2zVFywtUf5DzdHyJ3PwB1gkBVVCYzjYp xwpANQQFaWT4uUmW1TOW/fhI1ogJlFHH+Rb1p55c7t6F2JYhyrM2GX01yQfTcCT5jFHe 6UzQW4jZiTl9Cyfsyf93iQQmq6YonH81lEnCm5UCheJ8nYnXWnInRv8KW29AdAB3GM/l F7NF9rciaQnqL/E29/CPq1nwaBBlvE/w8aOgu8luXGrd4J7z97m+g53oPOvmKIlfrYhk xw5g== X-Gm-Message-State: AOJu0YyUDwFPv/4svwZiPe7udkJfkQVk6ZQUOvogTFzGvFjO3N8my8HF rJ/S3cnjKkLos+KKwdcqFoXmY59F4Drguti7vR+lWL7QNt8= X-Google-Smtp-Source: AGHT+IHl6D/d8tpDFUsKHrBumpqaf4HLONzJOKPf9HhD1UgbaNxbWvPM28wOFQbqGcLDGnRLHsmWpuMxvA04dRMDvSU= X-Received: by 2002:a17:906:4482:b0:a28:fc03:c5d4 with SMTP id y2-20020a170906448200b00a28fc03c5d4mr2385326ejo.20.1705337240260; Mon, 15 Jan 2024 08:47:20 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Mario Marietto Date: Mon, 15 Jan 2024 17:46:43 +0100 Message-ID: Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again To: John F Carr Cc: freebsd-arm , freebsd-hackers , FreeBSD Mailing List , "freebsd-xen@freebsd.org" , FreeBSD Current , Warner Losh , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/alternative; boundary="0000000000006d9686060efec4a3" X-Rspamd-Queue-Id: 4TDJ301kplz40N2 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --0000000000006d9686060efec4a3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable The ARM Chromebook is based on armv7,it is still recent. But let's change perspective for a moment,don't think about the ARM Chromebook. My question is : how to upgrade FreeBSD when it goes EOL. I ask this because there is a huge difference here between FreeBSD and Linux. Today if you need to use , for example Ubuntu 14.0, you can use it as is. Yes,there will be a lot of bugs,but it will work without crashes. But if you want to use an old FreeBSD system,nothing will work for you. So,do you know some methods to install even packages or ports ? You know,there are cases when you need to do some experiments so that you can keep your machine off the internet,so you aren't scared that someone can compromise it. Totally prohibiting the users to use an old system,removing ports and packages is not a choice that I approve of. And I'm not the only one that thinks like this. On Mon, Jan 15, 2024 at 5:21=E2=80=AFPM John F Carr wrote: > Judging by a commit message BSD on the ARM Chromebook didn't work > when support was removed in 2019. > > >RK* Exynos* and Meson*/Odroid* don't even work with current > >source code, if someone wants to make them work again they > >better use the Linux DTS. > > https://cgit.freebsd.org/src/commit?id=3D9dfa2a54684978d1d6cef67bbf6242e8= 25801f18 > > I have one of the "snow" Chromebooks. The warnings in the web page > https://wiki.freebsd.org/arm/Chromebook led me not to try FreeBSD. > None of the many bugs seemed likely to ever be fixed. I'm not using it > so I could try an experiment, but fighting with u-boot is not how I want > to spend my days. Even the popular Raspberry Pi takes skill or luck. > > (So "build an arm6 world and copy X, Y, and Z to the DOS partition > on your USB drive" is the kind of advice I need to supplement the old > Chromebook wiki page.) > > There is at least a little value in getting it to work because the armv6 > code is bit rotting and will go away entirely unless people use it. > > John Carr > > > > On Jan 15, 2024, at 10:59, Mario Marietto > wrote: > > > > Hello to everyone. > > > > I'm trying to install FreeBSD 14 natively on my ARM Chromebook model > xe303c12 ; I've found only one tutorial that teaches how to do that,that'= s > it : > > > > https://wiki.freebsd.org/arm/Chromebook > > > > The problem is that it ends with the installation of FreeBSD 11,that's > very EOL. > > I can't use it as is. I need to upgrade it to 14 (but I'm on arm 32 > bit,that's TIER-2,so I can't upgrade it automatically using the > freebsd-update script. It is also true that I can't install 14 directly o= n > that machine,as you can read below : > > > > > > > > > > I've looked all around and I found the tool pkgbase,that I'm talking > about on the FreeBSD forum,to understand if it allows the 11 to be usable > or upgradable. It does not seem to be the proper tool to achieve my goal. > Do you have any suggestions that can help me ? Thanks. > > > > -- > > Mario. > > --=20 Mario. --0000000000006d9686060efec4a3 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
The ARM Chromebook is based on armv7,it is still recent. B= ut let's change perspective for a moment,don't think about the ARM = Chromebook. My question is : how to upgrade FreeBSD when it goes EOL. I ask= this because there is a huge difference here between FreeBSD and Linux. To= day if you need to use , for example Ubuntu 14.0, you can use it as is. Yes= ,there will be a lot of bugs,but it will work without crashes. But if you w= ant to use an old FreeBSD system,nothing will work for you. So,do you know = some methods to install even packages or ports ? You know,there are cases w= hen you need to do some experiments so that you can keep your machine off t= he internet,so you aren't scared that someone can compromise it. Totall= y prohibiting the users to use an old system,removing ports and packages is= not a choice that I approve of. And I'm not the only one that thinks l= ike this.

On Mon, Jan 15, 2024 at 5:21=E2=80=AFPM John F Carr <jfc@mit.edu> wrote:
Judging by a commit m= essage BSD on the ARM Chromebook didn't work
when support was removed in 2019.

>RK* Exynos* and Meson*/Odroid* don't even work with current
>source code, if someone wants to make them work again they
>better use the Linux DTS.
https://cgit.freebs= d.org/src/commit?id=3D9dfa2a54684978d1d6cef67bbf6242e825801f18

I have one of the "snow" Chromebooks.=C2=A0 The warnings in the w= eb page
https://wiki.freebsd.org/arm/Chromebook led me not to try= FreeBSD.
None of the many bugs seemed likely to ever be fixed.=C2=A0 I'm not usi= ng it
so I could try an experiment, but fighting with u-boot is not how I want to spend my days.=C2=A0 Even the popular Raspberry Pi takes skill or luck.<= br>
(So "build an arm6 world and copy X, Y, and Z to the DOS partition
on your USB drive" is the kind of advice I need to supplement the old<= br> Chromebook wiki page.)

There is at least a little value in getting it to work because the armv6 code is bit rotting and will go away entirely unless people use it.

John Carr


> On Jan 15, 2024, at 10:59, Mario Marietto <marietto2008@gmail.com> wrote: >
> Hello to everyone.
>
> I'm trying to install FreeBSD 14 natively on my ARM Chromebook mod= el xe303c12 ; I've found only one tutorial that teaches how to do that,= that's it :
>
> https://wiki.freebsd.org/arm/Chromebook
>
> The problem is that it ends with the installation of FreeBSD 11,that&#= 39;s very EOL.
> I can't use it as is. I need to upgrade it to 14 (but I'm on a= rm 32 bit,that's TIER-2,so I can't upgrade it automatically using t= he freebsd-update script. It is also true that I can't install 14 direc= tly on that machine,as you can read below :
>
>
> <unnamed.png>
>
> I've looked all around and I found the tool pkgbase,that I'm t= alking about on the FreeBSD forum,to understand if it allows the 11 to be u= sable or upgradable. It does not seem to be the proper tool to achieve my g= oal. Do you have any suggestions that can help me ? Thanks.
>
> --
> Mario.



--
Mario.
--0000000000006d9686060efec4a3-- From nobody Mon Jan 15 16:58:58 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDJJp46yVz5768p for ; Mon, 15 Jan 2024 16:59:22 +0000 (UTC) (envelope-from dan@langille.org) Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDJJn2S6bz44C2; Mon, 15 Jan 2024 16:59:21 +0000 (UTC) (envelope-from dan@langille.org) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=langille.org header.s=fm3 header.b="2/O7XGPK"; dkim=pass header.d=messagingengine.com header.s=fm3 header.b="e 3EhcPU"; dmarc=pass (policy=none) header.from=langille.org; spf=pass (mx1.freebsd.org: domain of dan@langille.org designates 66.111.4.25 as permitted sender) smtp.mailfrom=dan@langille.org Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailout.nyi.internal (Postfix) with ESMTP id C519A5C0111; Mon, 15 Jan 2024 11:59:19 -0500 (EST) Received: from imap42 ([10.202.2.92]) by compute7.internal (MEProxy); Mon, 15 Jan 2024 11:59:19 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=langille.org; h= cc:cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1705337959; x=1705424359; bh=RWFg65FgomtoZiRGcxlla96Hg1KxNachC+mBsI4QeOA=; b= 2/O7XGPKPcxXxZ4cF3pIWkqaox46tqvo76MsnHU6ZgaeckiXHTljudr+lrwU6juQ 0kitbTAxdzEVL1z15ztulnKLmWiY8jV2jn5M2iEkUxx+YTPsxuQoOgKomLirEsZk Sz+H+rbpcqmcxlVBCb1IKlhV3xf6oix+ZkT+2SpQAs4Gi9mpdp+M7ux2djYCGouN HQLViL/MzWQ2BhDBb/4STGxSaeXAcovZEAv58CDC0WCFQNWqgGnbKjX72u5hi01T qbxb0B39nMAf7iosnaC3M7Qa+JzsBli48V3evkQRQG1QWi3Wi11wO6Jqado5nmxX 7pVeY3JiScHBGoU8Rs/gVg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1705337959; x= 1705424359; bh=RWFg65FgomtoZiRGcxlla96Hg1KxNachC+mBsI4QeOA=; b=e 3EhcPU1TMwj1REqKApIEkXfsMD8n2LWTQC/jLU1rQuMJBRyeBnAxxrpuanfZxCyJ 01T0YN03FaMSsNEqmdK3dG+USGFVaZcROaasb6UpJqNLsafuY/H19SwbAtfVhlsi e7uWKU3y7GEdwb7TTlH4orEaLcj9mMZyNPiH5mHkvmYOXeN1LINtictszZ33eOgp y5/b8EvCb8PUwLwiEj3nXVebYgT9u5ph43U5x9NNQIpi1IWepTOWo+t/qb965kA4 Lo8OhMTdIinAH8x10Mr8VTGpMUl1Kh7AbJZptTuMfWiX+jAtVMSSEBvWCk7j/vUz pGc7Cth8YTXqElifNJOKg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdejuddgleeiucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepofgfggfkjghffffhvfevufgtgfesthhqredtreerjeenucfhrhhomhepfdff rghnucfnrghnghhilhhlvgdfuceouggrnheslhgrnhhgihhllhgvrdhorhhgqeenucggtf frrghtthgvrhhnpeegleegteeitdetteehfeefvdefkedtueeijeekledthfejtdeuudef gefhgfetudenucffohhmrghinhepfhhrvggvsghsugdrohhrghdpfhhrvghshhhpohhrth hsrdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhho mhepuggrnheslhgrnhhgihhllhgvrdhorhhg X-ME-Proxy: Feedback-ID: ifbf9424e:Fastmail Received: by mailuser.nyi.internal (Postfix, from userid 501) id 7DAB9BC007D; Mon, 15 Jan 2024 11:59:19 -0500 (EST) X-Mailer: MessagingEngine.com Webmail Interface User-Agent: Cyrus-JMAP/3.9.0-alpha0-1374-gc37f3abe3d-fm-20240102.001-gc37f3abe List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Message-Id: <43875796-b619-47c4-874f-39090416b2ff@app.fastmail.com> In-Reply-To: <41A815DF-8F94-4B00-AEDF-D5E7456A0914@yahoo.com> References: <41A815DF-8F94-4B00-AEDF-D5E7456A0914@yahoo.com> Date: Mon, 15 Jan 2024 11:58:58 -0500 From: "Dan Langille" To: "Mark Millard" , "Philip Paeps" , "clusteradm@freebsd.org" Cc: "FreeBSD Hackers" Subject: Re: list of valid ABI combinations Content-Type: text/plain;charset=utf-8 Content-Transfer-Encoding: quoted-printable X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.19 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[langille.org,none]; R_SPF_ALLOW(-0.20)[+ip4:66.111.4.25]; R_DKIM_ALLOW(-0.20)[langille.org:s=fm3,messagingengine.com:s=fm3]; RCVD_IN_DNSWL_LOW(-0.10)[66.111.4.25:from]; RWL_MAILSPIKE_GOOD(-0.10)[66.111.4.25:from]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; TO_DN_EQ_ADDR_SOME(0.00)[]; MIME_TRACE(0.00)[0:+]; FREEMAIL_TO(0.00)[yahoo.com,freebsd.org,FreeBSD.org]; RCVD_COUNT_THREE(0.00)[3]; ARC_NA(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; DKIM_TRACE(0.00)[langille.org:+,messagingengine.com:+]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; FREEFALL_USER(0.00)[dan]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US]; TO_DN_SOME(0.00)[]; DWL_DNSWL_NONE(0.00)[messagingengine.com:dkim] X-Rspamd-Queue-Id: 4TDJJn2S6bz44C2 On Mon, Jan 8, 2024, at 3:00 AM, Mark Millard wrote: > On Jan 1, 2024, at 21:45, Philip Paeps wrote: > >> On 2024-01-02 12:38:47 (+0800), Mark Millard wrote: >>> [FYI: My internet access is limited to a cellphone for some number o= f days.] > > I'm back to having my normal internet access. > >>>> On Jan 1, 2024, at 19:26, Philip Paeps wrote: >>>>=20 >>>> =EF=BB=BFOn 2023-12-07 23:03:33 (+0800), Mark Millard wrote: >>>>> . . . >>>>>=20 >>>>> There might be issues at times with https://pkg.freebsd.org/index.= html not >>>>> being in sync. As far as I can tell, that page is manually maintai= ned. >>>>=20 >>>> clusteradm updates that page to match what we're actually distribut= ing. If it doesn't reflect reality, that's a bug, and we'd like to know= please. :-) >>>=20 >>> Does that include the =E2=80=9Conly ??? Is updated=E2=80=9D sorts of= notes? >>=20 >> Yes. Please let clusteradm know if the notes don't appear to reflect= reality. >>=20 >> clusteradm maintains the pkgsync infrastructure, which includes the i= ndex page on the mirrors. pkgmgr is responsible for scheduling the buil= ds. (And ports committers are responsible for making sure packages are = even buildable). >>=20 >>> For example, FreeBSD:13:armv6 Latest dates back to 2021-Jan-25 but t= here is no note about quarterly only. Various FreeBSD:15:* do not have n= otes about Latest only, despite having no quarterly at all. Some other c= ases have notable but shorter differences in the Latest vs. Quarterly ti= me frames, suggesting only one is being updated but no fixed difference = is definitive for that status. >>=20 >> The pkgsync infrastructure doesn't really care how often packages are= updated. If memory serves, we first added a "quarterly only" note when= the thunderxX generation of aarch64 builders broke with distressing reg= ularity. The ampereX builders are much more reliable. >>=20 >> I think the current situation for armv6 is "updated irregularly". Po= werPC is in the same boat as aarch64 in the ThunderX era: when the hardw= are works, packages are updated. >>=20 >> . . . >> Philip >>=20 >> --=20 >> Philip Paeps >> Senior Reality Engineer >> Alternative Enterprises > > Using https://dev.freshports.org/ports-mgmt/pkg looking for > versions involved that are prior to 1.20.* at this point > (or being "-") but having also a 1.20.* involved (or both > being "-"), hovering in order to see dates when available > . . > > > Not-reported / misreported on https://pkg.freebsd.org/ : > > FreeBSD:13:armv6 latest 1.16.2 (2021-01-25) vs. quarterly 1.19.2 (2023= -09-05) > So only quarterly is updated (and not regularly?). > > FreeBSD:14:armv6 latest 1.19.0 (2023-01-15) vs. quarterly - > So only latest is/was updated (and not regularly). > > FreeBSD:14:powerpc64 latest - vs. quarterly - > So neither latest nor quarterly is updated. > > FreeBSD:15:aarch64 latest 1.20.9 (2023-11-25) vs. quarterly - > So only latest is updated. > > FreeBSD:15:amd64 latest 1.20.9 (2023-11-25) vs. quarterly - > So only latest is updated. > > FreeBSD:15:armv7 latest 1.20.9 (2023-11-25) vs. quarterly - > So only latest is updated. > > FreeBSD:15:powerpc latest - vs. quarterly - > So neither latest nor quarterly is updated. > > FreeBSD:15:powerpc64 latest - vs. quarterly - > So neither latest nor quarterly is updated. > > FreeBSD:15:powerpc64le latest 1.20.9 (2023-11-25) vs. quarterly - > So only latest is updated. Mark: My reading of your email saying the above items are something for = clusteradm to consider? As opposed to FreshPorts needs to do something. --=20 Dan Langille dan@langille.org From nobody Mon Jan 15 17:57:18 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDKby3bzfz57D6F for ; Mon, 15 Jan 2024 17:57:34 +0000 (UTC) (envelope-from marklmi@yahoo.com) Received: from sonic304-24.consmr.mail.gq1.yahoo.com (sonic304-24.consmr.mail.gq1.yahoo.com [98.137.68.205]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDKby13hkz4FJb for ; Mon, 15 Jan 2024 17:57:33 +0000 (UTC) (envelope-from marklmi@yahoo.com) Authentication-Results: mx1.freebsd.org; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1705341451; bh=osfuH9+y14VuzNKJRpiYGQERSD/kM0D2c5Ufnof5Ido=; h=Subject:From:In-Reply-To:Date:Cc:References:To:From:Subject:Reply-To; b=JPDCDfpbqpQkbV2d/LclVOHSji5n7X4909JQ0q/CVyEA9o3LYANKme7m2eZwj0RnL+/oADS4aa85aUzwWh5voa+fhWZzeeBXEvOWGa6xQBYfcboYRFvLkz2EzK5QKoYQ4vpjmF63b2mJjUQjKJtgRgkZDvh9TWXLwWusxGGBua3DjZ5QWopUP7HaMBMynx5MS9jmOQ0XDEfEISF7TryhhDjdEZE5k6XcSa5NjlCH5Ctyd1Hl0BnBI9ob5l1NtvoSrMPn4QavYE9OkSnJeb0CPadE5gU2ImqEUHQu4CSeelO01f5KhNM4eE/Ec32nbWB3zo+WATIKZRdafe1Z/xCWbA== X-SONIC-DKIM-SIGN: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com; s=s2048; t=1705341451; bh=Ir1hUla1uy24/ZI8KgIe0GPlZAbRHJsoWLaRzWKBSDF=; h=X-Sonic-MF:Subject:From:Date:To:From:Subject; b=jTV0BVM/Rd7/rKmEghCChMBlYxOiADvGQRB1PAfAW9AgHNAG+e9xPoy2hKD1piTt0bZv1dhnxbgIYd/yeig8EqZl+LGgUl7gZs2t+Qwa+3dJ4NyAvcMkKOKz7VPPlMbBoAa3czN92mRuXqs1y1PAILQeWOH3K9RTGlY6FwfVPG242Ebe34zjTO1HPSks4p1QR8hTjbWikFPbAlmyDo5ej3H6302lMne5tv3LJP+qjN16fsCQo5K0GzNyag/zR/fkOvA4IGs55zK5q44775E0w62Yt9TaLmLnCFL59gRzxpZ7Cogf8zc93caDpgHxZ7oQeikWogyphcF/N1GnOyZb5w== X-YMail-OSG: _C52IGwVM1nh5Me.NvhJXq0Y1gF0eBIl0_Br0AlfYNMMJL0IgjHIaEOCGLMS3wJ r9atsQE3Gbmj8CHL9QIzrNg658Vb9d_9v9Esp2BRQB5PO2LBfi.zI4IkUnSeW_9A_LjaqJoQcs3s WCaQA7G5AYpfuwPUPMYqgA2kO3LzJUMwuVX7.deF48XM4uWOqzUrPLkzjnzR5K84zjzM..qqrRj9 bdcESUy6szsCs_7jniNoqDiBAnPQvgRuDp9cRaWA0aKCis.54Z491uzCaSVmE2aPFkRwkh8WT04O vCF1wqB9.lrdkLthxeSqigEYVEcEdBC5cApYeAsGRTavlk2HpKiQkAJHDUjmyBaQUxeyNcWuUbR1 wQRu5Wg68wpZvnVMafrU8GzIenvPF9dMjHSUvP1kr_S_LjkMTY94pxRtAdZaqsKEjnqVtK.ZNBlp 6K6Kj61rUfR1A8uu_R5k8KqYb4rOyYI7ySdy8V.y9tHT30qZXTCOZ6_ruh6kayzRDov0fDpkFzTC QRxlnOLFCyCLworWqfDrS3r1fQm7nq1Evt7KSbbowI5hIqVwtktPaSWp3USMPfxjJ9.Q4Ttop.q9 _ICadxwt0eiMyLIS9sSdwvmhTc4dizy8qF32Gx3Lk8mfGGOr9paARCYLEm0bS62Iy5BA0yS5tYGQ TvilW22g0KCAHZ2YzaXHWLVLGFujjktHhqAqerGBe1aPuEeSBo4Djv9TOqjUmhVBKpG96N9kpOxu M2Mfd4lVL9r4EwS5MP6IuXX6hAm7Ci8wweTDBZSd7bGXfAuHnca83oq.3m4dZ_fyKyo1ksiVaAwC ktCx6BDzRrVaySEejaFAz6gVWGT9dGwCqF5YL1RdUMFj8ozbvCGiVlOODypwu3xxTBOw4FyJ9ztL RzApM2gLr_ifAD5HP7rndCp1emF5q32J4NeNoknhtaCcntFxCwm6iwbRmeZWj6wsn9da_W_LIEew lI09AwdVizu6Py3GzjmfGMqFWTocg_pg3uYKYmcyHq8rYpKhe4KzFeihTwEgs0DZx48q2ZlSIJRA dTTJKlYVT3TFa3vR3a6W75oIyG1flWFBgSdt4w.JZujBukjU_96SN19JV6yWrn5oFM5E5IlterHn 9V3O28me9bTuX04XZ93RTx6LqTqryeJZ_VtYC1ibCh0.inMQr8892994nubE_obVZ8braTJxphKv Dp3kreWYWRhlfeqX25wXYFdFRTiF_YXHMfIlxxSqPzQukSZ5UAUs7pwahVLq312Pm7NUU.JXoL0B CE12s2N6ci2fkm0Ss5xsXoJIh_n8JDGPzyM6WdBLeJ.kSm8BZq_s0DU_DtRVktPFygPZGR4f0lcz CHLfdWEPNdkSVMV.Yp2H53jsHZcLp0xhwex05qEK7BzMGP_e2Ye3PzZb3qGz1eZVRfb_JyWna.MZ _jAs5Uio4hE85do27Qo0wrDMkZzCYgC3dY3RVAYTf3hXsoz0QQ9Bi.Bmnpefwz5vZ6rEBrzO_OBH sVwyckFKOvVXu.kIwBlkCRkj5xs3oPT4KTx_bUEzjB5luO4fuYoUHUfn0D1Se.CcEHzuU1851ARq iCkf8QNbXhDXHP9XtHdxhx_j7yichMnpbozsZ0uVdiJetj5F4l3pmXbsupuJPh7DeXBZAtBvL9FH HRcogoKwmhjQE9_rHGiQqbU_RzBNoL1c2ZN_om.Sat0fr2y6X8H5q.LiMSDEfZQyoS4RArajDaWI 2pnfGfYP8AJj2zJCLv2A46DgMlsUGgjEGBzmJVBX2_LBSIGRtU3NdMyzetHp5fOteo04.uICdvmH 9Q7f_DfQG.xOiIkGnV3_yIxHXal_GdZaDm0BD1lKjEzgzvn92VVD_YynoGcjHoyvmv16GoCHfaxV TtG9GQrRmdLt5Air7E5NPLfdhovS9o3niz5NuJEWLAoviiPq_780swTmgNlhCP9komWLIsYv.w_d 03l4dIEHq2N7OgAGOuaufMiQ_lgCcE5ZmZtv0fmWPK9SnBs2eRtB28LF4cSOeKEKPomCylNS5bPV f6amCEHVGB2QhVmQztwFhzmmzkO0tetCFFxFEiXBr9O_D8VYlpHmWr6qTDmbdS0VQu4X0.sOzuWX aGmc1.b1pt.TIHnBrxBT9peiYpA_EpeP9CopXvRy5uWXzLJ1uWDyGhYjl2qa79cHPqsWzyXmwGUt JdIEg1vv.F52tsV_d5E0mNqAWSqMQFGHTQedWdtMRnVEU0gY7sfm6EFTecow2lN4FML4I470qI2B kCEml6x5AlCqC.dm09b5qXAr.R5BM4HcX5vK1tYKnIP9c5Y4v2ZlJy83gmgklYYhyor0XXk0I4MM cte8- X-Sonic-MF: X-Sonic-ID: d482bdfe-f5b3-4925-8d5c-5896ae43e926 Received: from sonic.gate.mail.ne1.yahoo.com by sonic304.consmr.mail.gq1.yahoo.com with HTTP; Mon, 15 Jan 2024 17:57:31 +0000 Received: by hermes--production-gq1-78d49cd6df-c95sd (Yahoo Inc. Hermes SMTP Server) with ESMTPA ID e955deecdb914bb35edd707db20e4753; Mon, 15 Jan 2024 17:57:29 +0000 (UTC) Content-Type: text/plain; charset=utf-8 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: Re: list of valid ABI combinations From: Mark Millard In-Reply-To: <43875796-b619-47c4-874f-39090416b2ff@app.fastmail.com> Date: Mon, 15 Jan 2024 09:57:18 -0800 Cc: Philip Paeps , "clusteradm@freebsd.org" , FreeBSD Hackers Content-Transfer-Encoding: quoted-printable Message-Id: <0AF73A03-2AC2-4A1D-986F-B1E01A6B29DB@yahoo.com> References: <41A815DF-8F94-4B00-AEDF-D5E7456A0914@yahoo.com> <43875796-b619-47c4-874f-39090416b2ff@app.fastmail.com> To: Dan Langille X-Mailer: Apple Mail (2.3774.300.61.1.2) X-Rspamd-Queue-Id: 4TDKby13hkz4FJb X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:36647, ipnet:98.137.64.0/20, country:US] On Jan 15, 2024, at 08:58, Dan Langille wrote: > On Mon, Jan 8, 2024, at 3:00 AM, Mark Millard wrote: >> On Jan 1, 2024, at 21:45, Philip Paeps wrote: >>=20 >>> On 2024-01-02 12:38:47 (+0800), Mark Millard wrote: >>>> [FYI: My internet access is limited to a cellphone for some number = of days.] >>=20 >> I'm back to having my normal internet access. >>=20 >>>>> On Jan 1, 2024, at 19:26, Philip Paeps wrote: >>>>>=20 >>>>> =EF=BB=BFOn 2023-12-07 23:03:33 (+0800), Mark Millard wrote: >>>>>> . . . >>>>>>=20 >>>>>> There might be issues at times with = https://pkg.freebsd.org/index.html not >>>>>> being in sync. As far as I can tell, that page is manually = maintained. >>>>>=20 >>>>> clusteradm updates that page to match what we're actually = distributing. If it doesn't reflect reality, that's a bug, and we'd = like to know please. :-) >>>>=20 >>>> Does that include the =E2=80=9Conly ??? Is updated=E2=80=9D sorts = of notes? >>>=20 >>> Yes. Please let clusteradm know if the notes don't appear to = reflect reality. >>>=20 >>> clusteradm maintains the pkgsync infrastructure, which includes the = index page on the mirrors. pkgmgr is responsible for scheduling the = builds. (And ports committers are responsible for making sure packages = are even buildable). >>>=20 >>>> For example, FreeBSD:13:armv6 Latest dates back to 2021-Jan-25 but = there is no note about quarterly only. Various FreeBSD:15:* do not have = notes about Latest only, despite having no quarterly at all. Some other = cases have notable but shorter differences in the Latest vs. Quarterly = time frames, suggesting only one is being updated but no fixed = difference is definitive for that status. >>>=20 >>> The pkgsync infrastructure doesn't really care how often packages = are updated. If memory serves, we first added a "quarterly only" note = when the thunderxX generation of aarch64 builders broke with distressing = regularity. The ampereX builders are much more reliable. >>>=20 >>> I think the current situation for armv6 is "updated irregularly". = PowerPC is in the same boat as aarch64 in the ThunderX era: when the = hardware works, packages are updated. >>>=20 >>> . . . >>> Philip >>>=20 >>> --=20 >>> Philip Paeps >>> Senior Reality Engineer >>> Alternative Enterprises >>=20 >> Using https://dev.freshports.org/ports-mgmt/pkg looking for >> versions involved that are prior to 1.20.* at this point >> (or being "-") but having also a 1.20.* involved (or both >> being "-"), hovering in order to see dates when available >> . . >>=20 >>=20 >> Not-reported / misreported on https://pkg.freebsd.org/ : >>=20 >> FreeBSD:13:armv6 latest 1.16.2 (2021-01-25) vs. quarterly 1.19.2 = (2023-09-05) >> So only quarterly is updated (and not regularly?). >>=20 >> FreeBSD:14:armv6 latest 1.19.0 (2023-01-15) vs. quarterly - >> So only latest is/was updated (and not regularly). >>=20 >> FreeBSD:14:powerpc64 latest - vs. quarterly - >> So neither latest nor quarterly is updated. >>=20 >> FreeBSD:15:aarch64 latest 1.20.9 (2023-11-25) vs. quarterly - >> So only latest is updated. >>=20 >> FreeBSD:15:amd64 latest 1.20.9 (2023-11-25) vs. quarterly - >> So only latest is updated. >>=20 >> FreeBSD:15:armv7 latest 1.20.9 (2023-11-25) vs. quarterly - >> So only latest is updated. >>=20 >> FreeBSD:15:powerpc latest - vs. quarterly - >> So neither latest nor quarterly is updated. >>=20 >> FreeBSD:15:powerpc64 latest - vs. quarterly - >> So neither latest nor quarterly is updated. >>=20 >> FreeBSD:15:powerpc64le latest 1.20.9 (2023-11-25) vs. quarterly - >> So only latest is updated. >=20 >=20 > Mark: My reading of your email saying the above items are something = for clusteradm to consider? Yes. Philip P. had requested to let clusteradm know "if the notes don't appear to reflect reality". I did that once I got general internet access back. Since there are no detailed criteria for the categorizations, they may well consider a subset of what I reported as appropriate to deal with. That is part of why I listed versions (or "-") and dates (when available). > As opposed to FreshPorts needs to do something. I just used Freshports to find the time frames for ports-mgmt/pkg. I did not run into any oddities when I did so. It gives a good way to occasionally manually check on the status of the notes. So, more background information for you than anything. =3D=3D=3D Mark Millard marklmi at yahoo.com From nobody Mon Jan 15 17:57:31 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDKcD6xKKz57D8p for ; Mon, 15 Jan 2024 17:57:48 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [74.104.188.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "m5p.com", Issuer "R3" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDKcD0rdPz4Fb9 for ; Mon, 15 Jan 2024 17:57:48 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of george+freebsd@m5p.com designates 74.104.188.4 as permitted sender) smtp.mailfrom=george+freebsd@m5p.com Received: from [IPV6:2001:470:1f07:15ff::26] (court.m5p.com [IPv6:2001:470:1f07:15ff:0:0:0:26]) (authenticated bits=0) by mailhost.m5p.com (8.17.1/8.15.2) with ESMTPSA id 40FHvV4Z023729 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO) for ; Mon, 15 Jan 2024 12:57:37 -0500 (EST) (envelope-from george+freebsd@m5p.com) Message-ID: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> Date: Mon, 15 Jan 2024 12:57:31 -0500 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts Content-Language: en-US From: George Mitchell To: FreeBSD Hackers References: Autocrypt: addr=george+freebsd@m5p.com; keydata= xjMEZaHDbxYJKwYBBAHaRw8BAQdA2W6oBfS8haXY0/Ft4zS1OTLYfC8EBIADPTgMQdh85C3N KEdlb3JnZSBNaXRjaGVsbCA8Z2VvcmdlK2ZyZWVic2RAbTVwLmNvbT7CmQQTFgoAQRYhBDpv v9n4+UzMLAJ8EZocD3futmd9BQJlocSiAhsDBQkFo5qABQsJCAcCAiICBhUKCQgLAgQWAgMB Ah4HAheAAAoJEJocD3futmd9SxwBAJUi6DNdVhWCZBTv5XGy1g0JgApLWe/3S0M0zz9sn7/L AQCcJcV5k5s2rt9J5C1AUm6XVsuneVvIWXO5j1GKWk0NC844BGWhw28SCisGAQQBl1UBBQEB B0AaFz/6B95RRvjOdLZr5fSdhuIHvwr24H3ePDZSw6wlUwMBCAfCfgQYFgoAJhYhBDpvv9n4 +UzMLAJ8EZocD3futmd9BQJlocNvAhsMBQkFo5qAAAoJEJocD3futmd9RXsBANwRD9RE56F6 /jeZOrujHICLcgPiOt50Y6866v9OUTjUAP9GlC1aopfBpNwuPLJBam7oBaGqvY98VDhzOjoT 7DNbCQ== In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------kPlcEv1MnZ1eGB00krP0slPr" X-Spam-Status: No, score=0.2 required=10.0 tests=HELO_MISC_IP,HELO_NO_DOMAIN autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on mattapan.m5p.com X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.29 / 15.00]; SIGNED_PGP(-2.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-0.999]; R_SPF_ALLOW(-0.20)[+a]; MIME_GOOD(-0.20)[multipart/signed,multipart/mixed,text/plain]; MIME_BASE64_TEXT(0.10)[]; XM_UA_NO_VERSION(0.01)[]; FROM_HAS_DN(0.00)[]; RCVD_TLS_ALL(0.00)[]; TAGGED_FROM(0.00)[freebsd]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DMARC_NA(0.00)[m5p.com]; RCPT_COUNT_ONE(0.00)[1]; TO_DN_ALL(0.00)[]; HAS_ATTACHMENT(0.00)[]; ASN(0.00)[asn:701, ipnet:74.104.0.0/16, country:US]; ARC_NA(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; MLMMJ_DEST(0.00)[freebsd-hackers@FreeBSD.org]; MID_RHS_MATCH_FROM(0.00)[]; R_DKIM_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~] X-Rspamd-Queue-Id: 4TDKcD0rdPz4Fb9 This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------kPlcEv1MnZ1eGB00krP0slPr Content-Type: multipart/mixed; boundary="------------19Ymk0EZj5ZyKdz4GF5ZpSF4"; protected-headers="v1" From: George Mitchell To: FreeBSD Hackers Message-ID: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts References: In-Reply-To: --------------19Ymk0EZj5ZyKdz4GF5ZpSF4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 T24gMS8xNC8yNCAxMDozNiwgR2VvcmdlIE1pdGNoZWxsIHdyb3RlOg0KPiBJIHJlYWQgbWFp bCB3aXRoIFRodW5kZXJiaXJkIGFuZCBmb3IgbXkgZml4ZWQtd2lkdGggZm9udCBJIHVzZWQg Tm90bw0KPiBNb25vLsKgIFNpbmNlIGJ5IGRlc2lnbiBOb3RvIGhhcyBnbHlwaHMgZm9yIGFs bCBVbmljb2RlIGNoYXJhY3RlcnMsDQo+IHRoYXQgbWVhbnMgaXQgY29udGFpbnMgZ2x5cGhz IGZvciBsaWdhdHVyZXMgKHRob3NlIGNoYXJhY3RlciBwYWlycw0KPiBiZWxvdmVkIG9mIHR5 cG9ncmFwaGVycyB0aGF0IGNvbmRlbnNlIGNlcnRhaW4gY29tYmluYXRpb25zIHN1Y2ggYXMN Cj4gImZpIiBhbmQgImZmbCIgaW50byBzaW5nbGUgZ2x5cGhzLsKgIEF0IHNvbWUgbGV2ZWwg YmV0d2VlbiB0aGUgdGV4dCBvZg0KPiB0aGUgbWFpbCBJJ20gcmVhZGluZyBvciBjb21wb3Np bmcsIHdoaWNoIGRvZXMgbm90IHVzZSB0aG9zZSBVbmljb2RlDQo+IGxpZ2F0dXJlIGNvZGUg cG9pbnRzLCBhbmQgdGhlIHBpeGVscyB0aGF0IGFwcGVhciBvbiBteSBzY3JlZW4sIG15DQo+ IGZpeGVkLXdpZHRoIHRleHQgaXMgbm8gbG9uZ2VyIHJlbmRlcmVkIHdpdGggZml4ZWQgd2lk dGggZ2x5cGhzLg0KPiBbLi4uXQ0KDQpXaXRoIGhlbHAgZnJvbSBCZXJ0cmFuZCBQZXRpdCBh bmQgU3RlcGhlbiBIdXJkLCBJIGZvdW5kIG91dCB0aGF0IHRoaXMNCmlzIGEgZmVhdHVyZSBv ZiB0aGUgZm9udCBzeXN0ZW0gaXRzZWxmLCBvciBhdCBsZWFzdCBmb250Y29uZmlnLiAgVGhl DQpmaXggaXMgdG8gY3JlYXRlIGEgbmV3IGZpbGUsIH4vLmNvbmZpZy9mb250Y29uZmlnL2Zv bnRzLmNvbmYsIGFuZCBwdXQNCnRoZSBjb250ZW50cyBvZjoNCmh0dHBzOi8vYnVncy5mcmVl YnNkLm9yZy9idWd6aWxsYS9hdHRhY2htZW50LmNnaT9pZD0yNDcwNTANCmluIGl0Lg0KDQpU byBteSBtaW5kLCB0aGUgaWRlYSB0aGF0IHRoZSBmb250IHN5c3RlbSBpdHNlbGYgd291bGQg ZG8gdGhpcyBzb3J0IG9mDQptYW5pcHVsYXRpb24gdG8gdGhlIHRleHQgaXQncyByZW5kZXJp bmcgaXMgYSBzZXZlcmUgdmlvbGF0aW9uIG9mIHRoZQ0KUHJpbmNpcGxlIG9mIExlYXN0IEFz dG9uaXNobWVudC4gIFdobyB0aG91Z2h0IHRoaXMgd291bGQgYmUgYSBnb29kIGlkZWE/DQot LSBHZW9yZ2UNCg== --------------19Ymk0EZj5ZyKdz4GF5ZpSF4-- --------------kPlcEv1MnZ1eGB00krP0slPr Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQQ6b7/Z+PlMzCwCfBGaHA937rZnfQUCZaVyCwUDAAAAAAAKCRCaHA937rZnfY04 AP9XE3cpyGD4GIXEbewKGEFVzWA9pFsOr5A5k4680msWSQD9Fs3/0YIE4FiA2JoiFd6tyTuFdGmo zJTCZUoIHLNRugM= =EjPw -----END PGP SIGNATURE----- --------------kPlcEv1MnZ1eGB00krP0slPr-- From nobody Mon Jan 15 18:14:48 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDL061LSSz57Fn0; Mon, 15 Jan 2024 18:15:02 +0000 (UTC) (envelope-from theraven@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDL060q4yz4Kxg; Mon, 15 Jan 2024 18:15:02 +0000 (UTC) (envelope-from theraven@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705342502; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=d0/IbcyKDemaHn7DKPTlbBlpVQncBceJ6kYfFdjJf1U=; b=uxi/zy1WLcTULjTCB8MGAEr7EAjawZPs46/9TAV+W6PFu7INdgBUto9oaLC8FsvLW++x72 eeVMsb+tPhug6Vq2eCX+uCGwVeMWBxLCFRJHiYVQwTBQDcTTQFy1LBhB057VgFz8E0CM0x ssQzBRLVmVwzsJ9RDRGwWQ+LH756jZhLtp79s0FOj2+MA58Aqg/TBJDvJqjUYAhb7U8H3k wcTpeLiuVgMZUM83vGhLKmt+mYt998tyKS2FLnSYrJ6Z5s9ilO3nEC5czIyuUS/OPTsVFA +Sk/CALqAw89gcIVlV23Op0MuK+O5YbZvGG0hMcSQbDuYzBY8h8iRU0/huB/Ew== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705342502; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=d0/IbcyKDemaHn7DKPTlbBlpVQncBceJ6kYfFdjJf1U=; b=Mh7vnvBG8vQdDKKwicM2rovmymzCcHmlx0k4bBVM3/lR5WEj0lyYNbxy1zmVSWjgS50AtE jfc2GTkZV16fpBQ0qjty4GjS5FCwHVgvWTW45trTQsFMS/Jtpt9MC03XacWHCXPaJVIjCO ArX5DvmXqJQIxVApRTUSrCPJWEpGH0oiwiln66X0I7oOZapDW4y9oK2cy6wjHlFVeDqnRY aeWaEKhkQ5Iq+oPmDN0LOv0P2qBAZlwKNevyJtbKEp8CpqbJrUh6a5iSHKntbkU5IT4JXQ hCdntJxa5uc3Q3qMHJxWazpiyuDEhuFId+Qy2m1loONBBIK1EnGtQY7JOM0j0w== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705342502; a=rsa-sha256; cv=none; b=FHi9DpkyXsUV46FLnQ2+cZQSFYiuNytbQR3UBzwUvTHb3O0JG3/GruV9yqOY/WdHHzlASz ZZR4JoW2XzXUZFUy3goVX9LtJBkE0iLlSCJKTgn8cW1VtJrfF85Uvse2Z8ISstDfVeSKzB owOoCal0eipJGGUNVuboiGrb7vg2GF5q8kwvE5JH52BO4QSpcWgYqfhn+9kJNEuxiRg03e +8AhuJm6s5YyETimTmBROo71oNdaDR4+ibzrVv82Uofa1KhfaAnAEA72t7J+IVKsnU4HE2 ZkLJq5hZOrAMb+ORiVtX9v+2HTfO9OvyP0eL4n7bFIs+IMW+h3aRqg3ZvrgEhg== Received: from smtp.theravensnest.org (smtp.theravensnest.org [45.77.103.195]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: theraven) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TDL056m5xzM0B; Mon, 15 Jan 2024 18:15:01 +0000 (UTC) (envelope-from theraven@FreeBSD.org) Received: from smtpclient.apple (host81-141-223-70.range81-141.btcentralplus.com [81.141.223.70]) by smtp.theravensnest.org (Postfix) with ESMTPSA id 5CA86BE07; Mon, 15 Jan 2024 18:15:00 +0000 (GMT) Content-Type: text/plain; charset=utf-8 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again From: David Chisnall In-Reply-To: Date: Mon, 15 Jan 2024 18:14:48 +0000 Cc: John F Carr , freebsd-arm , freebsd-hackers , FreeBSD Mailing List , "freebsd-xen@freebsd.org" , FreeBSD Current , Warner Losh , =?utf-8?Q?Roger_Pau_Monn=C3=A9?= Content-Transfer-Encoding: quoted-printable Message-Id: References: To: Mario Marietto X-Mailer: Apple Mail (2.3774.200.91.1.1) On 15 Jan 2024, at 16:46, Mario Marietto wrote: >=20 > The ARM Chromebook is based on armv7,it is still recent. For reference, the ARMv7 architecture was introduced in 2005. The last = cores that implemented the architecture were released in 2014. This is = not a =E2=80=98recent=E2=80=99 architecture, it=E2=80=99s one that=E2=80=99= s 19 years old and has been largely dead for several years. > But let's change perspective for a moment,don't think about the ARM = Chromebook. My question is : how to upgrade FreeBSD when it goes EOL. Generally, run `freebsd-update`. This is a very different question from = =E2=80=98how do I do a new install of an old an unsupported version?' > I ask this because there is a huge difference here between FreeBSD and = Linux. Today if you need to use , for example Ubuntu 14.0, you can use = it as is. Yes,there will be a lot of bugs,but it will work without = crashes. But if you want to use an old FreeBSD system,nothing will work = for you. So,do you know some methods to install even packages or ports ? = You know,there are cases when you need to do some experiments so that = you can keep your machine off the internet,so you aren't scared that = someone can compromise it. Totally prohibiting the users to use an old = system,removing ports and packages is not a choice that I approve of. = And I'm not the only one that thinks like this. If you want to use an old and unsupported version of FreeBSD, no one is = stopping you, but: - You will need to build the releases. The source code is still in = git, you can. The scripts for building the release images are right = there in the repo. Just grab the relevant release or releng branch and = go. - You will need to build packages. Newer versions of the ports tree = will not be tested with the older release, so you may need to use an = older checkout of the ports tree. Poudriere will build a package repo = for you. =20 In both cases, if you=E2=80=99re using older versions you almost = certainly *will* have security vulnerabilities. The project strongly = advises you not to do this and not to blame us when you install = known-insecure software and end up compromised. The project does not have enough active contributors to keep maintaining = things indefinitely. This is why release have a five-year supported = lifetime. If you want to pick up an old branch and maintain it, = you=E2=80=99re welcome to. In the past, companies have picked up old = branches and maintained them for customers that had a dependency on = them. If you want to pay someone to maintain an old branch (and have = deep pockets) then there are probably a few companies that will happily = take your money. Maintaining binaries is a slightly different issue, but it=E2=80=99s not = totally unrelated. Keeping old packages around consumes disk space and = costs the project money (remember, every package is mirrored across the = CDN, so this isn=E2=80=99t just a single disk). Even if it were free, = philosophically, I think making it easy for users to install = known-insecure software is a bad idea but if you want to keep a package = repo with out-of-date packages online indefinitely then you can. You = can run Poudriere and even cross-compile from a fairly beefy cloud = machine quite easily. It=E2=80=99s been a while since I did a full package build, but I would = guess that you could do a single package build (all ports) for about $50 = on a cloud VM, more (2-3x) if it=E2=80=99s emulated. Storing the = results for a small number of users will cost around $10-20/month. If = you think this is an important thing to do, then you are absolutely = welcome to spend your own money on doing it. David From nobody Mon Jan 15 18:48:06 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDLl40tt4z57LBn; Mon, 15 Jan 2024 18:48:48 +0000 (UTC) (envelope-from marietto2008@gmail.com) Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDLl35vkYz4TJB; Mon, 15 Jan 2024 18:48:47 +0000 (UTC) (envelope-from marietto2008@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-5592d2bc270so1656199a12.1; Mon, 15 Jan 2024 10:48:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705344523; x=1705949323; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=I/WoT+Ay3mzobABXMuF7AlcLOD0UXEORhbexuiMS3jc=; b=maVx6eer64Codn/m4OY+Jx7XQH5qKPJcnTTQuvTeF+G4ED+LNbzJGPugA/yHfSoy+a NwhoBORj2B4MCAdyUeXXLcpryaq0sPi9M3WtYcihzp84HPJX2SAccLj+ZrwSzcwgIa78 1QN4b7TVM2sQ4zl6V4dypg40LmNDq0+UYXKMd4jvRJvv4r3hznI+pGK6PWVKKypUKaO+ AZBDOKAShlS0okILvs1VIdmozxCW2WhXkaTy4IWFu/loLzinK6K8kKprDDLQHSKmqRbK LrNjn1jGJ1ZsmfHq02Xq9E8UrZ0vOfQxjD1yXd/Bvjnplqoa2x0gBc5hOzpO/vmLLYlZ fYcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705344523; x=1705949323; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=I/WoT+Ay3mzobABXMuF7AlcLOD0UXEORhbexuiMS3jc=; b=IluRGduNITza3Xcx2E1pk6i4L1lABtcKu8mfy/lgtajN5u/qeJmXCsqBs63WUpYAtQ 2LrmvLdLPLcvEIcX0EdndiH5GTl+Qp8fLk9jSjpMX8SzylwXlM0RSgKVlTnNftFAbA5/ muXfeejE38BYvGVQvIGvIQXgQwmstiKL6PoHmBPE81IHMN7d6g57QpQ7P8scBkvpqjhF qPjdzITSar3RNlvA4h+NjAAlD1Wzin+GvAonw1BENWghaCxJhpXMqo6dOXq6c4G5D6TM TAPNJQFlvqt1ixtHrOtoGGA+8n7+XHL5rma4gVQb8EDjB3ec3aN9SNZ9EjcnfZUZmrJP xW7Q== X-Gm-Message-State: AOJu0YyE12BNTmDdKI3zX/AQKHKeIJXztMRezbuzkbbu5cGafLKymYi/ Tpfpq2ZszRf++VRX9lji+5RI3uWh1M9rPvRcPVzCRTn2CNI= X-Google-Smtp-Source: AGHT+IGS7eSa65YjqkaboRH6mDNUmVYlffE4MIJeRgh5P3fDXyd/r71xNmO94HTynry1lUgpQc6OxlxILxi8IC+yIM4= X-Received: by 2002:a17:906:9b44:b0:a2b:238d:50f2 with SMTP id ep4-20020a1709069b4400b00a2b238d50f2mr2263418ejc.152.1705344522663; Mon, 15 Jan 2024 10:48:42 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Mario Marietto Date: Mon, 15 Jan 2024 19:48:06 +0100 Message-ID: Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again To: David Chisnall , Mark Millard Cc: John F Carr , freebsd-arm , freebsd-hackers , FreeBSD Mailing List , "freebsd-xen@freebsd.org" , FreeBSD Current , Warner Losh , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/alternative; boundary="0000000000007e39b1060f007600" X-Rspamd-Queue-Id: 4TDLl35vkYz4TJB X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --0000000000007e39b1060f007600 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello. Do you have deleted forever the set of packages and ports for FreeBSD 11 or you keep them stored in DVDs that I can buy or download for a small amount of money ? If yes,where ? To rebuild everything is out of my expertise. On Mon, Jan 15, 2024 at 7:15=E2=80=AFPM David Chisnall wrote: > On 15 Jan 2024, at 16:46, Mario Marietto wrote: > > > > The ARM Chromebook is based on armv7,it is still recent. > > For reference, the ARMv7 architecture was introduced in 2005. The last > cores that implemented the architecture were released in 2014. This is n= ot > a =E2=80=98recent=E2=80=99 architecture, it=E2=80=99s one that=E2=80=99s = 19 years old and has been largely > dead for several years. > > > But let's change perspective for a moment,don't think about the ARM > Chromebook. My question is : how to upgrade FreeBSD when it goes EOL. > > Generally, run `freebsd-update`. This is a very different question from > =E2=80=98how do I do a new install of an old an unsupported version?' > > > I ask this because there is a huge difference here between FreeBSD and > Linux. Today if you need to use , for example Ubuntu 14.0, you can use it > as is. Yes,there will be a lot of bugs,but it will work without crashes. > But if you want to use an old FreeBSD system,nothing will work for you. > So,do you know some methods to install even packages or ports ? You > know,there are cases when you need to do some experiments so that you can > keep your machine off the internet,so you aren't scared that someone can > compromise it. Totally prohibiting the users to use an old system,removin= g > ports and packages is not a choice that I approve of. And I'm not the onl= y > one that thinks like this. > > If you want to use an old and unsupported version of FreeBSD, no one is > stopping you, but: > > - You will need to build the releases. The source code is still in git, > you can. The scripts for building the release images are right there in > the repo. Just grab the relevant release or releng branch and go. > > - You will need to build packages. Newer versions of the ports tree wil= l > not be tested with the older release, so you may need to use an older > checkout of the ports tree. Poudriere will build a package repo for you. > > In both cases, if you=E2=80=99re using older versions you almost certainl= y *will* > have security vulnerabilities. The project strongly advises you not to d= o > this and not to blame us when you install known-insecure software and end > up compromised. > > The project does not have enough active contributors to keep maintaining > things indefinitely. This is why release have a five-year supported > lifetime. If you want to pick up an old branch and maintain it, you=E2= =80=99re > welcome to. In the past, companies have picked up old branches and > maintained them for customers that had a dependency on them. If you want > to pay someone to maintain an old branch (and have deep pockets) then the= re > are probably a few companies that will happily take your money. > > Maintaining binaries is a slightly different issue, but it=E2=80=99s not = totally > unrelated. Keeping old packages around consumes disk space and costs the > project money (remember, every package is mirrored across the CDN, so thi= s > isn=E2=80=99t just a single disk). Even if it were free, philosophically= , I think > making it easy for users to install known-insecure software is a bad idea > but if you want to keep a package repo with out-of-date packages online > indefinitely then you can. You can run Poudriere and even cross-compile > from a fairly beefy cloud machine quite easily. > > It=E2=80=99s been a while since I did a full package build, but I would g= uess that > you could do a single package build (all ports) for about $50 on a cloud > VM, more (2-3x) if it=E2=80=99s emulated. Storing the results for a smal= l number > of users will cost around $10-20/month. If you think this is an importan= t > thing to do, then you are absolutely welcome to spend your own money on > doing it. > > David > > --=20 Mario. --0000000000007e39b1060f007600 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello.

Do you have deleted f= orever the set of packages and ports for FreeBSD 11 or you keep them stored= in DVDs that I can buy or download for a small amount of money ? If yes,wh= ere ? To rebuild everything is out of my expertise.

On Mon, Jan 1= 5, 2024 at 7:15=E2=80=AFPM David Chisnall <theraven@freebsd.org> wrote:
On 15 Jan 2024, at 16:46, Mario Marietto &= lt;marietto2008= @gmail.com> wrote:
>
> The ARM Chromebook is based on armv7,it is still recent.

For reference, the ARMv7 architecture was introduced in 2005.=C2=A0 The las= t cores that implemented the architecture were released in 2014.=C2=A0 This= is not a =E2=80=98recent=E2=80=99 architecture, it=E2=80=99s one that=E2= =80=99s 19 years old and has been largely dead for several years.

> But let's change perspective for a moment,don't think about th= e ARM Chromebook. My question is : how to upgrade FreeBSD when it goes EOL.=

Generally, run `freebsd-update`.=C2=A0 This is a very different question fr= om =E2=80=98how do I do a new install of an old an unsupported version?'= ;

> I ask this because there is a huge difference here between FreeBSD and= Linux. Today if you need to use , for example Ubuntu 14.0, you can use it = as is. Yes,there will be a lot of bugs,but it will work without crashes.=C2= =A0 But if you want to use an old FreeBSD system,nothing will work for you.= So,do you know some methods to install even packages or ports ? You know,t= here are cases when you need to do some experiments so that you can keep yo= ur machine off the internet,so you aren't scared that someone can compr= omise it. Totally prohibiting the users to use an old system,removing ports= and packages is not a choice that I approve of. And I'm not the only o= ne that thinks like this.

If you want to use an old and unsupported version of FreeBSD, no one is sto= pping you, but:

=C2=A0- You will need to build the releases.=C2=A0 The source code is still= in git, you can.=C2=A0 The scripts for building the release images are rig= ht there in the repo.=C2=A0 Just grab the relevant release or releng branch= and go.

=C2=A0- You will need to build packages.=C2=A0 Newer versions of the ports = tree will not be tested with the older release, so you may need to use an o= lder checkout of the ports tree.=C2=A0 Poudriere will build a package repo = for you.=C2=A0

In both cases, if you=E2=80=99re using older versions you almost certainly = *will* have security vulnerabilities.=C2=A0 The project strongly advises yo= u not to do this and not to blame us when you install known-insecure softwa= re and end up compromised.

The project does not have enough active contributors to keep maintaining th= ings indefinitely.=C2=A0 This is why release have a five-year supported lif= etime.=C2=A0 If you want to pick up an old branch and maintain it, you=E2= =80=99re welcome to.=C2=A0 In the past, companies have picked up old branch= es and maintained them for customers that had a dependency on them.=C2=A0 I= f you want to pay someone to maintain an old branch (and have deep pockets)= then there are probably a few companies that will happily take your money.=

Maintaining binaries is a slightly different issue, but it=E2=80=99s not to= tally unrelated.=C2=A0 Keeping old packages around consumes disk space and = costs the project money (remember, every package is mirrored across the CDN= , so this isn=E2=80=99t just a single disk).=C2=A0 Even if it were free, ph= ilosophically, I think making it easy for users to install known-insecure s= oftware is a bad idea but if you want to keep a package repo with out-of-da= te packages online indefinitely then you can.=C2=A0 You can run Poudriere a= nd even cross-compile from a fairly beefy cloud machine quite easily.

It=E2=80=99s been a while since I did a full package build, but I would gue= ss that you could do a single package build (all ports) for about $50 on a = cloud VM, more (2-3x) if it=E2=80=99s emulated.=C2=A0 Storing the results f= or a small number of users will cost around $10-20/month.=C2=A0 If you thin= k this is an important thing to do, then you are absolutely welcome to spen= d your own money on doing it.

David



--
Mario.
--0000000000007e39b1060f007600-- From nobody Tue Jan 16 07:09:09 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDg9W3tdZz56yQn for ; Tue, 16 Jan 2024 07:09:19 +0000 (UTC) (envelope-from ml@netfence.it) Received: from soth.netfence.it (mailserver.netfence.it [78.134.96.152]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mailserver.netfence.it", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDg9V3d3qz494C for ; Tue, 16 Jan 2024 07:09:18 +0000 (UTC) (envelope-from ml@netfence.it) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=pass (policy=none) header.from=netfence.it; spf=pass (mx1.freebsd.org: domain of ml@netfence.it designates 78.134.96.152 as permitted sender) smtp.mailfrom=ml@netfence.it Received: from [10.1.2.18] (alamar.local.netfence.it [10.1.2.18]) (authenticated bits=0) by soth.netfence.it (8.17.2/8.17.1) with ESMTPSA id 40G799E5009043 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NO); Tue, 16 Jan 2024 08:09:10 +0100 (CET) (envelope-from ml@netfence.it) X-Authentication-Warning: soth.netfence.it: Host alamar.local.netfence.it [10.1.2.18] claimed to be [10.1.2.18] Message-ID: Date: Tue, 16 Jan 2024 08:09:09 +0100 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts Content-Language: en-US To: George Mitchell , FreeBSD Hackers References: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> From: Andrea Venturoli In-Reply-To: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.79 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[netfence.it,none]; R_SPF_ALLOW(-0.20)[+ip4:78.134.96.152]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; TAGGED_RCPT(0.00)[freebsd]; ARC_NA(0.00)[]; ASN(0.00)[asn:35612, ipnet:78.134.0.0/17, country:IT]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; RCPT_COUNT_TWO(0.00)[2]; R_DKIM_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; FROM_HAS_DN(0.00)[]; HAS_XAW(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; TO_DN_ALL(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@FreeBSD.org]; RCVD_TLS_ALL(0.00)[] X-Rspamd-Queue-Id: 4TDg9V3d3qz494C On 1/15/24 18:57, George Mitchell wrote: > With help from Bertrand Petit and Stephen Hurd, I found out that this > is a feature of the font system itself, or at least fontconfig.  The > fix is to create a new file, ~/.config/fontconfig/fonts.conf, and put > the contents of: > https://bugs.freebsd.org/bugzilla/attachment.cgi?id=247050 > in it. Hello. Thanks for bringing this up, as I'm experiencing the same problem. I've looked up the patch you linked, but I don't know where to put it exacly. I already have ~/.config/fontconfig/fonts.conf and it's an XML file: none true hintmedium true So where would that additional line go? I don't know where my version comes from. Perhaps it was crafted from XFCE settings GUI? Is this all obsolete? Should I delete this and replace it with the given text? bye & Thanks av. From nobody Tue Jan 16 07:45:13 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDh3W2LNWz573RY for ; Tue, 16 Jan 2024 07:49:11 +0000 (UTC) (envelope-from freebsd-hackers@phoe.frmug.org) Received: from frmug.org (enterprise.frmug.org [213.36.253.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDh3W0KTQz4FTK for ; Tue, 16 Jan 2024 07:49:10 +0000 (UTC) (envelope-from freebsd-hackers@phoe.frmug.org) Authentication-Results: mx1.freebsd.org; none Received: by frmug.org (Postfix, from userid 66) id 6A56412B887; Tue, 16 Jan 2024 08:49:03 +0100 (CET) Received: by memo2.memo.frmug.org (Postfix, from userid 1001) id 0C0A517984; Tue, 16 Jan 2024 08:45:13 +0100 (CET) Date: Tue, 16 Jan 2024 08:45:13 +0100 From: Bertrand Petit To: Andrea Venturoli Cc: FreeBSD Hackers Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts Message-ID: <20240116074513.GC14773@memo2.memo.frmug.org> References: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.12.1 (2019-06-15) X-Rspamd-Queue-Id: 4TDh3W0KTQz4FTK X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:12322, ipnet:213.36.0.0/16, country:FR] On Tue, Jan 16, 2024 at 08:09:09AM +0100, Andrea Venturoli wrote: > > I've looked up the patch you linked, but I don't know where to put it > exacly. > I already have ~/.config/fontconfig/fonts.conf and it's an XML file: Extract the whole tag from George's document and insert it anywhere in your fonts.conf file with the limitation that it must be placed at the same level as the already present s. > I don't know where my version comes from. Perhaps it was crafted from > XFCE settings GUI? You way want to make your file read-only in order to prevent any desktop environment from overwriting your settings. You can also place the whole document George mentioned in a separate file in the ~/.config/fontconfig/ directory. For reference, look in /usr/local/etc/fonts/ how this is done system-wide. > Is this all obsolete? Should I delete this and replace it with the given > text? Those settings are fine and can be kept. Removing then will change the appearance of text on screen. -- %!PS -- Bertrand Petit /D{def}def/E{exch}D/G{get}D/I{2 div}D/U{dup}D/L{roll}D/Y{setgray}D/N{newpath}D /O{N 0 0 moveto}D/P{pop}D/T{translate}D currentpagedevice/PageSize G U 0 G/w E D 1 G /h E D w I h I T 0 Y 1 setlinewidth 0 1 2 { P 120 rotate 2 4 w U mul h U mul add sqrt I 50 add {N 50 0 3 2 L 0 360 arc stroke}for}for/s{O true charpath pathbbox exch 4 -1 L E sub I 3 1 L sub I} D /l(bp)D 0.94 Y /Helvetica findfont 22 scalefont setfont l s P(x)s exch P T O l show showpage From nobody Tue Jan 16 08:37:26 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDj7T4pLMz578Sn for ; Tue, 16 Jan 2024 08:37:41 +0000 (UTC) (envelope-from theraven@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDj7T4GBZz4MFL; Tue, 16 Jan 2024 08:37:41 +0000 (UTC) (envelope-from theraven@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705394261; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tHr3rmcBGby/+5b1cSZCrXOhVEnOKDPTw3g7qi4iFnk=; b=qxJQR9M9/DB3VECV/z6ccfUYMT/yJN7O0zcg9drwyuHdQBdH5EIDZPf4xR8HWYFx4bkIWR beEWBovd8eaEqVGEFIX80SnPeJGsu8zik7FYBeKRXmeMvDnBJ5xfDlAIS6YV6IB1/bZllV PpwRRGaJwGrPKT72HJ/dD5C+9HxSK7TCtLWEluVl8/AGTDVSMjLLAWx3oJAt8GaypIIB6/ YUiGOkAkF+75xMgfPg+0GvRGnDfJzezFM+bjSCrcwr+jV37RgqfW+nnQz1vVOQ8ReitMIX f2et1ssaTni6XLEY2wd74oeZcqquxveSfsRzLfT5Q38RV4MMmVsbBuCLRq7HLg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705394261; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=tHr3rmcBGby/+5b1cSZCrXOhVEnOKDPTw3g7qi4iFnk=; b=jWXXKdBbVfA+NAWWCT4pDMIWTqOs0R5CYog8yffzfvAUoYzSi3njxYEByL1G4vza/cKSc2 aX7mNOubqS/wp487nN+LUHgUMkMnAHRqq8mFqYlg8eJgi33b9nuhPOUHwiprM3dmKz8siw Tasf1Kl1pdiHRHwf/zTMpIddDnlZahEgAhtDcLCaw0lobArW0NzQTT3bz3kkMrA3/jDgLF YjHY+rTucetkZnIKeV27n8q4MjU+c31PvVmurr+uVrepHoMefKXT0KLfaoWZlyvLMMQIRz 3D4VFYn8A1TbmD21FggLAY44Wtk+57ZkVvi1mjYp00Mc9Rpgeve2Wuzh4DUj4A== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705394261; a=rsa-sha256; cv=none; b=gp6+RhzV8zDMDM0FoAGzPWqvfyrtPpIG+NyFzuuc+bnHlxrxuSFNk5lkMLCrAiyUox8tD9 SqH+GnM2pUfOoJAfMEEhIhNUFC3VYL/ok9cLK1HdYIEe8huOQvaRLkF2LHoc8tovXv4H14 UthReveVeXhHtadBLC9zF1Pk/44XJO36ftmDkvFHrRoG0h/8JZNi8hRRfH8aivvDusCRpi TF4sr0CNPc2e7a1IpPpF8rx+s0KzBXGT32OAcWV49hONPrsGVw5mmlGznxoBIeuSpJzoCE d3XleV9fwMSDtHXixbav+AflNcitIGwIXsYcKsHP78+YvqezrxZWG+6A8hsylQ== Received: from smtp.theravensnest.org (smtp.theravensnest.org [45.77.103.195]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: theraven) by smtp.freebsd.org (Postfix) with ESMTPSA id 4TDj7T39PwzcV0; Tue, 16 Jan 2024 08:37:41 +0000 (UTC) (envelope-from theraven@freebsd.org) Received: from smtpclient.apple (host81-141-223-70.range81-141.btcentralplus.com [81.141.223.70]) by smtp.theravensnest.org (Postfix) with ESMTPSA id 91AD4BE28; Tue, 16 Jan 2024 08:37:40 +0000 (GMT) Content-Type: multipart/alternative; boundary=Apple-Mail-6AB4A039-2CEA-40A7-91E0-3E55ACF7429C Content-Transfer-Encoding: 7bit From: David Chisnall List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 (1.0) Subject: Re: New to freeBSD and looking for guidance Date: Tue, 16 Jan 2024 08:37:26 +0000 Message-Id: <415886F8-A9BC-45D9-9276-CA60CB413501@freebsd.org> References: Cc: Sairaj Kodilkar , freebsd-hackers@freebsd.org In-Reply-To: To: =?utf-8?Q?Bojan_Novkovi=C4=87?= X-Mailer: iPad Mail (21C62) --Apple-Mail-6AB4A039-2CEA-40A7-91E0-3E55ACF7429C Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
Hi,=

If you=E2=80=99re still wo= rking on this, can we have a call sometime to go over the design? Spending t= ime exactly replicating the Solaris-flavoured interfaces is probably not pro= ductive and there are some self-contained building blocks that could be sepa= rated out and landed independently that would be very useful.

David
(I put the prop= osal on the projects page originally)

On 14 Jan 2024, a= t 21:21, Bojan Novkovi=C4=87 <bnovkov@freebsd.org> wrote:

=EF=BB=BF
Hi Sairaj,

I'd like to weigh in on the Solaris Doors topic (I'm t= he author of the implementation Warner mentioned).
The current implementation is a PoC at best, and is, as noted b= y David, missing some features. Development is currently at a standstill due= to a general lack of spare time and a=20 (probably wrongly) perceived lack of interest around the project, but it isn= 't abandoned or finished.

There is= still work to be done, and if this is something you'd like to work on I'd b= e delighted to discuss this further.

Bojan
<= /div>

On Sat, Jan 13, 2024 at 16:52=E2=80=AFPM Sairaj Kodilkar &= lt;skodilkar7@gmail.com> wrote:
Hello hackers=
I am Sairaj Kodilkar, a kernel enthusiast=20 and looking to explore FreeBSD. I am currently working at samsung=20 semiconductor research and previously interned as linux kernel developer at Texas instruments, where I worked on adding xen hypervisor support=20 for their SOC. I previously contributed to unikernel as part of google=20 summer of code where I worked on synchronizing virtio network driver.
I was going through the ideas list and found  "Solaris Doors IPC Implementation" and "bhyve gdb-s= tub/dcons integration". I would like to know if they are still available.
Also I am new to FreeBSD, so any guidance on these topics is appreciated.=

Regards
Sairaj Kodilkar
= --Apple-Mail-6AB4A039-2CEA-40A7-91E0-3E55ACF7429C-- From nobody Tue Jan 16 08:58:09 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDjb834fFz57BRm for ; Tue, 16 Jan 2024 08:58:12 +0000 (UTC) (envelope-from ml@netfence.it) Received: from soth.netfence.it (mailserver.netfence.it [78.134.96.152]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mailserver.netfence.it", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDjb801vfz4VND for ; Tue, 16 Jan 2024 08:58:11 +0000 (UTC) (envelope-from ml@netfence.it) Authentication-Results: mx1.freebsd.org; none Received: from [10.1.2.18] (alamar.local.netfence.it [10.1.2.18]) (authenticated bits=0) by soth.netfence.it (8.17.2/8.17.1) with ESMTPSA id 40G8w9OY025587 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NO); Tue, 16 Jan 2024 09:58:09 +0100 (CET) (envelope-from ml@netfence.it) X-Authentication-Warning: soth.netfence.it: Host alamar.local.netfence.it [10.1.2.18] claimed to be [10.1.2.18] Message-ID: Date: Tue, 16 Jan 2024 09:58:09 +0100 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts Content-Language: en-US To: Bertrand Petit Cc: FreeBSD Hackers References: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> <20240116074513.GC14773@memo2.memo.frmug.org> From: Andrea Venturoli In-Reply-To: <20240116074513.GC14773@memo2.memo.frmug.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4TDjb801vfz4VND X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:35612, ipnet:78.134.0.0/17, country:IT] On 1/16/24 08:45, Bertrand Petit wrote: > On Tue, Jan 16, 2024 at 08:09:09AM +0100, Andrea Venturoli wrote: >> >> I've looked up the patch you linked, but I don't know where to put it >> exacly. >> I already have ~/.config/fontconfig/fonts.conf and it's an XML file: > > Extract the whole tag from George's document and insert it > anywhere in your fonts.conf file with the limitation that it must be placed at > the same level as the already present s. Doh!!! Helpful Firefox!!! It completely hid the fact that the attachment was XML too! :( Sorry for the dumb question. I'm trying this now... seems to be working. bye & Thanks av. From nobody Tue Jan 16 10:16:14 2024 X-Original-To: hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDlKY6Cvnz57LG0 for ; Tue, 16 Jan 2024 10:16:33 +0000 (UTC) (envelope-from bzeeb-lists@lists.zabbadoz.net) Received: from mx1.sbone.de (cross.sbone.de [195.201.62.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mx1.sbone.de", Issuer "SBone.DE Root Certificate Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDlKX4zkYz4df4 for ; Tue, 16 Jan 2024 10:16:32 +0000 (UTC) (envelope-from bzeeb-lists@lists.zabbadoz.net) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of bzeeb-lists@lists.zabbadoz.net designates 195.201.62.131 as permitted sender) smtp.mailfrom=bzeeb-lists@lists.zabbadoz.net Received: from mail.sbone.de (mail.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:1025]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sbone.de (Postfix) with ESMTPS id DB9708D4A233 for ; Tue, 16 Jan 2024 10:16:24 +0000 (UTC) Received: from content-filter.t4-02.sbone.de (content-filter.t4-02.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:2742]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPS id 895A12D029D8 for ; Tue, 16 Jan 2024 10:16:24 +0000 (UTC) X-Virus-Scanned: amavisd-new at sbone.de Received: from mail.sbone.de ([IPv6:fde9:577b:c1a9:4902:0:7404:2:1025]) by content-filter.t4-02.sbone.de (content-filter.t4-02.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:2742]) (amavisd-new, port 10024) with ESMTP id e-6i6YYYGImr for ; Tue, 16 Jan 2024 10:16:15 +0000 (UTC) Received: from strong-aiccu0.sbone.de (strong-aiccu0.sbone.de [IPv6:fde9:577b:c1a9:f491::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPSA id 8A9A02D029D2 for ; Tue, 16 Jan 2024 10:16:15 +0000 (UTC) Date: Tue, 16 Jan 2024 10:16:14 +0000 (UTC) From: "Bjoern A. Zeeb" To: hackers@freebsd.org Subject: libsa xzfs_fsops? Message-ID: X-OpenPGP-Key-Id: 0x14003F198FEFA3E77207EE8D2B58B8F83CCF1842 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; format=flowed; charset=US-ASCII X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.29 / 15.00]; SUBJECT_ENDS_QUESTION(1.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.99)[-0.992]; R_SPF_ALLOW(-0.20)[+ip4:195.201.62.131]; MIME_GOOD(-0.10)[text/plain]; FROM_HAS_DN(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; ASN(0.00)[asn:24940, ipnet:195.201.0.0/16, country:DE]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; MISSING_XM_UA(0.00)[]; RCVD_COUNT_THREE(0.00)[4]; MLMMJ_DEST(0.00)[hackers@freebsd.org]; DMARC_NA(0.00)[zabbadoz.net]; TO_DN_NONE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; R_DKIM_NA(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[hackers@freebsd.org]; ARC_NA(0.00)[] X-Rspamd-Queue-Id: 4TDlKX4zkYz4df4 Hi, how hard would it be to add xzfs_fsops to libsa like we already have for gz and bz2 and lz4(undocumented?) ? /bz -- Bjoern A. Zeeb r15:7 From nobody Tue Jan 16 10:26:00 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDlXX4nJ6z57LyJ for ; Tue, 16 Jan 2024 10:26:04 +0000 (UTC) (envelope-from bzeeb-lists@lists.zabbadoz.net) Received: from mx1.sbone.de (cross.sbone.de [195.201.62.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "mx1.sbone.de", Issuer "SBone.DE Root Certificate Authority" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDlXW5GpMz4gTV for ; Tue, 16 Jan 2024 10:26:03 +0000 (UTC) (envelope-from bzeeb-lists@lists.zabbadoz.net) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of bzeeb-lists@lists.zabbadoz.net designates 195.201.62.131 as permitted sender) smtp.mailfrom=bzeeb-lists@lists.zabbadoz.net Received: from mail.sbone.de (mail.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:1025]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.sbone.de (Postfix) with ESMTPS id C1F028D4A228; Tue, 16 Jan 2024 10:26:02 +0000 (UTC) Received: from content-filter.t4-02.sbone.de (content-filter.t4-02.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:2742]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPS id 73E442D029D7; Tue, 16 Jan 2024 10:26:02 +0000 (UTC) X-Virus-Scanned: amavisd-new at sbone.de Received: from mail.sbone.de ([IPv6:fde9:577b:c1a9:4902:0:7404:2:1025]) by content-filter.t4-02.sbone.de (content-filter.t4-02.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:2742]) (amavisd-new, port 10024) with ESMTP id 0AmyIloY1o2c; Tue, 16 Jan 2024 10:26:01 +0000 (UTC) Received: from strong-aiccu0.sbone.de (strong-aiccu0.sbone.de [IPv6:fde9:577b:c1a9:f491::2]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPSA id 365E92D029D2; Tue, 16 Jan 2024 10:26:01 +0000 (UTC) Date: Tue, 16 Jan 2024 10:26:00 +0000 (UTC) From: "Bjoern A. Zeeb" To: Chris Torek cc: freebsd-hackers@freebsd.org Subject: Re: known iwlwifi bugs? [...] In-Reply-To: Message-ID: <7pn2on05-2159-3r31-0515-q5s62s20rn00@yvfgf.mnoonqbm.arg> References: X-OpenPGP-Key-Id: 0x14003F198FEFA3E77207EE8D2B58B8F83CCF1842 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.30 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; R_SPF_ALLOW(-0.20)[+ip4:195.201.62.131:c]; MIME_GOOD(-0.10)[text/plain]; ASN(0.00)[asn:24940, ipnet:195.201.0.0/16, country:DE]; TO_DN_SOME(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; MISSING_XM_UA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; TAGGED_RCPT(0.00)[]; FROM_HAS_DN(0.00)[]; R_DKIM_NA(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FREEMAIL_TO(0.00)[gmail.com]; RCVD_TLS_LAST(0.00)[]; RCVD_COUNT_THREE(0.00)[4]; DMARC_NA(0.00)[zabbadoz.net]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; SUBJECT_HAS_QUESTION(0.00)[] X-Rspamd-Queue-Id: 4TDlXW5GpMz4gTV On Sun, 14 Jan 2024, Chris Torek wrote: Hi Chris, > I just brought up a new AMD 7950X based system on an ASRock Taichi > motherboard. Side note here: I had to use the SATA_Ax ports, the SATA_[1-4] > ports give channel timeouts, I have yet to look into those (other than > verifying that it's not a matter of waiting longer). > > The "Killer Ethernet" isn't up yet so I'm using the iwl wlan interface at > the moment. Things were going pretty good (32 CPUs for building! > buildworld takes under 16 minutes and buildkernel took 15 seconds, using 32 > jobs and the -jobs targets) but while building various ports I had a crash. > > The relevant part of the stack trace is: > > #6 0xffffffff83019ed2 at iwl_mvm_mac_itxq_xmit+0xc2 > #7 0xffffffff83028a6f at iwl_mvm_queue_state_change+0x1ef > #8 0xffffffff8306b085 at iwl_txq_reclaim+0x7f5 > #9 0xffffffff8304848e at iwl_mvm_rx_tx_cmd+0x14e > #10 0xffffffff83025d4e at iwl_mvm_rx_common+0x1ee > #11 0xffffffff8305a4c3 at iwl_pcie_rx_handle+0x483 > #12 0xffffffff83059f20 at iwl_pcie_napi_poll_msix+0x30 > #13 0xffffffff80dafcef at lkpi_napi_task+0xf > #14 0xffffffff80ba5922 at taskqueue_run_locked+0x182 > #15 0xffffffff80ba6bb2 at taskqueue_thread_loop+0xc2 > > I didn't get a crash dump (not sure why) and am still running the release > kernel at the moment, but this looks like it's in one of the linuxkpi > adapters, perhaps linuxkpi_ieee80211_tx_dequeue. Likely because you hit a firmware crash or some other problem. Hard to say without whatever was before that. Give you are mentioning linuxkpi_ieee80211_tx_dequeue, could have been this one? https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=275710 When you say you are still running release, that is 14.0? The freebsd-wireless list is generally a better place to to let us know about wireless problems. /bz -- Bjoern A. Zeeb r15:7 From nobody Tue Jan 16 10:46:54 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDm0n1BKdz57P9c for ; Tue, 16 Jan 2024 10:47:05 +0000 (UTC) (envelope-from SRS0=/MDR=I2=quip.cz=000.fbsd@elsa.codelab.cz) Received: from elsa.codelab.cz (elsa.codelab.cz [94.124.105.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDm0m6665z4kkP for ; Tue, 16 Jan 2024 10:47:04 +0000 (UTC) (envelope-from SRS0=/MDR=I2=quip.cz=000.fbsd@elsa.codelab.cz) Authentication-Results: mx1.freebsd.org; none Received: from elsa.codelab.cz (localhost [127.0.0.1]) by elsa.codelab.cz (Postfix) with ESMTP id 894DFD7890; Tue, 16 Jan 2024 11:46:56 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1705402016; bh=X9D8hf5dbBLEdfacYrGb+8en5/VFSql3dYFx6qi/ZDI=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=NZCPUfihK1Nhgdh7ULNr4hGtYd68kAUYTmqsTycAstO2HnUM4ZGavRvgDsMPTXXU5 DTh3miFevX2QH0QUUBhqjovfwkos/FCNN+g/Fu9ws/Wi0gU5khuB0zerHAcPDeSFjv nhdeSYbT2NRhi4udN0rzU44HVw6gSQOzjv/dbeXA= Received: from [192.168.145.49] (ip-89-177-27-225.bb.vodafone.cz [89.177.27.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by elsa.codelab.cz (Postfix) with ESMTPSA id 1CE63D7884; Tue, 16 Jan 2024 11:46:55 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1705402015; bh=X9D8hf5dbBLEdfacYrGb+8en5/VFSql3dYFx6qi/ZDI=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=vdRdCp3oy3eZpZTa+ZYtDKkaVFlyLN9W4gDSjxYSaeE1cwImy0LUc/CO2ue2bprsd fpzQuXGXygpO/UnTlmT8oRopait+Bj830F0Rc1kW/SDjDPyXBhCsBw8XEPC9YWyXzA jIFdKx6mw6B33y7uwy6F81IHdPoTRoq24YQIIzj4= Message-ID: Date: Tue, 16 Jan 2024 11:46:54 +0100 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts To: Bertrand Petit , Andrea Venturoli Cc: FreeBSD Hackers References: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> <20240116074513.GC14773@memo2.memo.frmug.org> Content-Language: cs-Cestina From: Miroslav Lachman <000.fbsd@quip.cz> In-Reply-To: <20240116074513.GC14773@memo2.memo.frmug.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4TDm0m6665z4kkP X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:42000, ipnet:94.124.104.0/21, country:CZ] On 16/01/2024 08:45, Bertrand Petit wrote: [..] >> I don't know where my version comes from. Perhaps it was crafted from >> XFCE settings GUI? > > You way want to make your file read-only in order to prevent any > desktop environment from overwriting your settings. > > You can also place the whole document George mentioned in a separate > file in the ~/.config/fontconfig/ directory. For reference, look in > /usr/local/etc/fonts/ how this is done system-wide. Can this be placed as a separate file into /usr/local/etc/fonts/conf.d/? This way it will not be overwritten by upgrade or another app. Kind regards Miroslav Lachman From nobody Tue Jan 16 11:19:19 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDmqW491fz57SFC for ; Tue, 16 Jan 2024 11:24:07 +0000 (UTC) (envelope-from freebsd-hackers@phoe.frmug.org) Received: from frmug.org (enterprise.frmug.org [213.36.253.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDmqW0Vrrz4q54 for ; Tue, 16 Jan 2024 11:24:06 +0000 (UTC) (envelope-from freebsd-hackers@phoe.frmug.org) Authentication-Results: mx1.freebsd.org; none Received: by frmug.org (Postfix, from userid 66) id 7D43312B8B8; Tue, 16 Jan 2024 12:24:04 +0100 (CET) Received: by memo2.memo.frmug.org (Postfix, from userid 1001) id 910FE17984; Tue, 16 Jan 2024 12:19:19 +0100 (CET) Date: Tue, 16 Jan 2024 12:19:19 +0100 From: Bertrand Petit To: Miroslav Lachman <000.fbsd@quip.cz> Cc: FreeBSD Hackers Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts Message-ID: <20240116111919.GD14773@memo2.memo.frmug.org> References: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> <20240116074513.GC14773@memo2.memo.frmug.org> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.12.1 (2019-06-15) X-Rspamd-Queue-Id: 4TDmqW0Vrrz4q54 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:12322, ipnet:213.36.0.0/16, country:FR] On Tue, Jan 16, 2024 at 11:46:54AM +0100, Miroslav Lachman wrote: > > Can this be placed as a separate file into /usr/local/etc/fonts/conf.d/? > This way it will not be overwritten by upgrade or another app. Indeed, you can place the configuration file there. I would argue against it because the settings made there apply to all users, even non interactive ones such as daemons using fontconfig to serve bitmap content generated on the fly. For a desktop user, the best place is still a separate file located in any of the directories listed in /usr/local/etc/fonts/conf.d/50-user.conf. Contrary to fonts.conf, files you name yourself will probably not be altered by the desktop---if they are then its a bug. -- %!PS -- Bertrand Petit /D{def}def/E{exch}D/G{get}D/I{2 div}D/U{dup}D/L{roll}D/Y{setgray}D/N{newpath}D /O{N 0 0 moveto}D/P{pop}D/T{translate}D currentpagedevice/PageSize G U 0 G/w E D 1 G /h E D w I h I T 0 Y 1 setlinewidth 0 1 2 { P 120 rotate 2 4 w U mul h U mul add sqrt I 50 add {N 50 0 3 2 L 0 360 arc stroke}for}for/s{O true charpath pathbbox exch 4 -1 L E sub I 3 1 L sub I} D /l(bp)D 0.94 Y /Helvetica findfont 22 scalefont setfont l s P(x)s exch P T O l show showpage From nobody Tue Jan 16 14:25:07 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TDrrS1P2sz57KYJ for ; Tue, 16 Jan 2024 14:25:12 +0000 (UTC) (envelope-from SRS0=/MDR=I2=quip.cz=000.fbsd@elsa.codelab.cz) Received: from elsa.codelab.cz (elsa.codelab.cz [94.124.105.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TDrrR5slmz4FJY for ; Tue, 16 Jan 2024 14:25:11 +0000 (UTC) (envelope-from SRS0=/MDR=I2=quip.cz=000.fbsd@elsa.codelab.cz) Authentication-Results: mx1.freebsd.org; none Received: from elsa.codelab.cz (localhost [127.0.0.1]) by elsa.codelab.cz (Postfix) with ESMTP id 70228D7890; Tue, 16 Jan 2024 15:25:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1705415109; bh=8hDPAhLTNPihv4iOLdJtznnGV4Nvph37Bg1YeIc0Lxc=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=qJ8MRZOr2gANc6SqTJWJqQVQoA+Cyc/E+9w+dNY1vX8N2Qpu+FA6xCC8wupsI8vgN g4vBmqIfaCaTyi+tqRLMiWKrjGmo4FvRbwqD4LYVSD1OB160PJM1pD8Sc6sPjUONUv CE1g40IIJabu43qkwR0IX1RC6xIV42AoXLZLyBmY= Received: from [192.168.145.49] (ip-89-177-27-225.bb.vodafone.cz [89.177.27.225]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by elsa.codelab.cz (Postfix) with ESMTPSA id B9038D7884; Tue, 16 Jan 2024 15:25:07 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quip.cz; s=private; t=1705415107; bh=8hDPAhLTNPihv4iOLdJtznnGV4Nvph37Bg1YeIc0Lxc=; h=Date:Subject:To:Cc:References:From:In-Reply-To; b=RZ2qK132lHXD+/hzwZfLLL/ZQLyGPtwzeVscM0MPbvKfnkiJKUD5dZJlw8OgXc0+7 TC8bRqDA02BVAVDwqKzrkwinLE0HySH1XuUg86R5cMME0MvOE9Pyi+3/K/KNCQOiLX RPllF23VCyc5fEri0tWEV+8u/ivNjH7cKL5YlZwI= Message-ID: <4210157e-6505-44a9-9cc0-bf48dac0cf25@quip.cz> Date: Tue, 16 Jan 2024 15:25:07 +0100 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Thunderbird, ligatures, and "fixed-width" fonts To: Bertrand Petit Cc: FreeBSD Hackers References: <43ad528d-e45c-47fe-837c-cf7716ea7d86@m5p.com> <20240116074513.GC14773@memo2.memo.frmug.org> <20240116111919.GD14773@memo2.memo.frmug.org> Content-Language: cs-Cestina From: Miroslav Lachman <000.fbsd@quip.cz> In-Reply-To: <20240116111919.GD14773@memo2.memo.frmug.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Rspamd-Queue-Id: 4TDrrR5slmz4FJY X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:42000, ipnet:94.124.104.0/21, country:CZ] On 16/01/2024 12:19, Bertrand Petit wrote: > On Tue, Jan 16, 2024 at 11:46:54AM +0100, Miroslav Lachman wrote: >> >> Can this be placed as a separate file into /usr/local/etc/fonts/conf.d/? >> This way it will not be overwritten by upgrade or another app. > > Indeed, you can place the configuration file there. I would argue > against it because the settings made there apply to all users, even non > interactive ones such as daemons using fontconfig to serve bitmap content > generated on the fly. For a desktop user, the best place is still a separate > file located in any of the directories listed in > /usr/local/etc/fonts/conf.d/50-user.conf. Contrary to fonts.conf, files you > name yourself will probably not be altered by the desktop---if they are then > its a bug. Thank you for the clarification! Kind regards Miroslav Lachman From nobody Wed Jan 17 16:27:36 2024 X-Original-To: hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TFWWW09jdz5884G for ; Wed, 17 Jan 2024 16:27:51 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TFWWV2HN8z4J31 for ; Wed, 17 Jan 2024 16:27:50 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=bsdimp-com.20230601.gappssmtp.com header.s=20230601 header.b=wp7jghgm; dmarc=none; spf=none (mx1.freebsd.org: domain of wlosh@bsdimp.com has no SPF policy when checking 2a00:1450:4864:20::530) smtp.mailfrom=wlosh@bsdimp.com Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-5571e662b93so9367456a12.2 for ; Wed, 17 Jan 2024 08:27:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705508869; x=1706113669; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=lFPRwEsUIg/GExPC1qfzVkgDwwaZsrYEbvRjFr8wHNg=; b=wp7jghgmaf6BvPi7jQIl4KL4cqUuKo0PSWYUhgMaxoWtFB3cQlXrxXEXtSLc4vQU5E DHAnlCmMQaeGFP1hJ1aDYteR7qgrNY0JVC+X0HtXAsHLf9GMfkj5kWfkDpMje20KDPJz AZ+qjRgmivgCcjZ9oKgU0II9r4GR5WV/qsIS8hHeFOPghkl9NOqZTiyTuNvrbRNG68NA uyawuuwmlaVODc5N5bB0rvCoYyYuoymRwgGyMtoZHBX2O4enup0/9pkReK3kGlS2s41/ thtzTZAJKX4r+Ywe7Q4NScSupFPMeWFPJ9D5Azg3VVTd331cOOyOvyj9H9jtLdIT7u2+ s2rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705508869; x=1706113669; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=lFPRwEsUIg/GExPC1qfzVkgDwwaZsrYEbvRjFr8wHNg=; b=kdXFNBIoBwZmaGpdvxhbJrG/C7NpIkm8II7N//QhgtriIFEftqXydX+ACsI6+QEQ1W YuII6INYJFwkhAstel0Z4OiBALSM5XsPgrsqLSHtdOy/MtgFpggoQnpoVBPdRVsAPby6 MzY0416hrgNdLkLSjYp43DmpuQ8jAd8RF5ijON+6+lEhNwWDd9BUztZMnFG/uEoJWJ9J ypEEXxJFK4jLxI195ux48HFrkVo53uQ57EoqWmISKG86SoE03taZXCHlOcIwyT3HBA5T r9h3K/l985IeQxrmsx7ss6UxSFXl54X7cpkfiOmtR+7qO6HHKXYLgUc5BTsAPTEV00Qg dljA== X-Gm-Message-State: AOJu0YzT97fiPSZ7ZP+X+a1M75ljClUew8A/NgjL3gs9nRGJG+b8MIDd ojFJEktRBfaLOf974XnQHEidWTgtVFwNXhoDMsPk10PdzAsr9w== X-Google-Smtp-Source: AGHT+IEZch6EMVvtb9+copBrPkEW2hCSBEtFOzvhthYhV0AkBgOQqXM3LH/c7nbv9E5yn7wAlv//iCgyfTZpM6wNr9s= X-Received: by 2002:a05:6402:3514:b0:554:a300:5a72 with SMTP id b20-20020a056402351400b00554a3005a72mr6405484edd.11.1705508868444; Wed, 17 Jan 2024 08:27:48 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Warner Losh Date: Wed, 17 Jan 2024 09:27:36 -0700 Message-ID: Subject: Re: libsa xzfs_fsops? To: "Bjoern A. Zeeb" Cc: hackers@freebsd.org Content-Type: multipart/alternative; boundary="00000000000043e755060f26badc" X-Spamd-Bar: - X-Spamd-Result: default: False [-2.00 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; SUBJECT_ENDS_QUESTION(1.00)[]; NEURAL_HAM_SHORT(-1.00)[-0.999]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20230601.gappssmtp.com:s=20230601]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; RCVD_COUNT_ONE(0.00)[1]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; MIME_TRACE(0.00)[0:+,1:+,2:~]; ARC_NA(0.00)[]; TO_DN_SOME(0.00)[]; MISSING_XM_UA(0.00)[]; R_SPF_NA(0.00)[no SPF record]; RCPT_COUNT_TWO(0.00)[2]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::530:from]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com]; FROM_HAS_DN(0.00)[]; DMARC_NA(0.00)[bsdimp.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[hackers@freebsd.org]; MLMMJ_DEST(0.00)[hackers@freebsd.org]; DKIM_TRACE(0.00)[bsdimp-com.20230601.gappssmtp.com:+] X-Rspamd-Queue-Id: 4TFWWV2HN8z4J31 --00000000000043e755060f26badc Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Jan 16, 2024 at 3:16=E2=80=AFAM Bjoern A. Zeeb < bzeeb-lists@lists.zabbadoz.net> wrote: > how hard would it be to add xzfs_fsops to libsa like we already have for > gz and bz2 and lz4(undocumented?) ? > It wouldn't be horribly hard, though those hooks are for filesystems full of files that are compressed, which is funky to generate and not well supported after boot. Patches to fix the lz4 oversight are welcome. The loader was a dumping ground for many years, and it grew lz4 support during this time. It would also almost certainly not be in the x86 BIOS boot path: that's already too large and so it's closed to new features (at least by default, you can customize it however you want). Warner --00000000000043e755060f26badc Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Tue, Jan 16, 2024 at 3:16=E2=80=AF= AM Bjoern A. Zeeb <bze= eb-lists@lists.zabbadoz.net> wrote:
how hard would it be to add xzfs_fsops to libsa = like we already have for
gz and bz2 and lz4(undocumented?) ?

It = wouldn't be horribly hard, though those hooks are for filesystems full = of files that
are compressed, which is funky to generate and not = well supported after boot.

Patches to fix the lz4 = oversight are welcome. The loader was a dumping ground for many years, and = it grew lz4 support during this time.

It would als= o almost certainly not be in the x86 BIOS boot path: that's already too= large and so it's closed to new features (at least by default, you can= customize it however you want).

Warner=C2=A0
<= /div>
--00000000000043e755060f26badc-- From nobody Wed Jan 17 22:54:06 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TFh602pg3z56xr1; Wed, 17 Jan 2024 22:54:48 +0000 (UTC) (envelope-from marietto2008@gmail.com) Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TFh5z3PbZz4BJ0; Wed, 17 Jan 2024 22:54:47 +0000 (UTC) (envelope-from marietto2008@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b=cncX443B; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of marietto2008@gmail.com designates 2a00:1450:4864:20::52b as permitted sender) smtp.mailfrom=marietto2008@gmail.com Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-557dcb0f870so11719153a12.2; Wed, 17 Jan 2024 14:54:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705532084; x=1706136884; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=nSnQOjjxuF3HP/SQOZZ6iXjGnfG8l+tXCOSpX5Tr914=; b=cncX443B3MHzqzq7lcIOFXNep1A8apI43dOjOSrpgUTZ/NyKAn0yaeETYTLRO6SfMR C8a922T1qMwnI4YOZI5YXYnVo/MoTLxZ/XlBCzQojta2NLN+hShdw7ondVUMb2lmgaUl yHcgJHdUnfJUfMjrfMazVFoyzWdaqKip0jDBgsfAsBjF4HrrXsISLHMjZKhR2BZq8urB Zajo7CF3/AsKjemrwUFl9hu9N8W1Kb5kdgscgj4h3vrYC4/7J1ZjINB7WXyPKvMpseux sAzesATfi/aRrEb/Lt0G0CrKVQkBih9iFSA4BodRnX1nk3bzogMl3UCr3LSJrWpjnq1S /1kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705532084; x=1706136884; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nSnQOjjxuF3HP/SQOZZ6iXjGnfG8l+tXCOSpX5Tr914=; b=BphHi4sJ8SSOCol/NlMeludM9meX6BdrVki8aGhAN9imp9f+IiYi21utJdOWvJ6KHe TdAkQR1jhajdTOBSRbUCQs18tzvV7WZ21pLyNm2aFuBFzgGhTiYBZS8D6ai9UjXMlIcl p3V/s8kOAhLeHA1+/Aj8oywuw4GZ7TQQGvJo23dEasBqPdAHAhUGu5x6H8KmS3aQGPRF QJ7JF9p4ZacR9iDse/DV2qRuiBlp5hM/B2wDBsI6v+eS9f+AY2Zyh+Oo5BNm2PY092hH Ew5rHYD+yyltvwcqZo00F3f4/ICvAfidhw8w9YTFZTDLsDMKFln4INeGWS7mUL5ifX17 hNBQ== X-Gm-Message-State: AOJu0YyLvDYzVW4N1bPJvoP+z9yFhklPY8cz05v83OCRM+sYuLqARltf m3rWJrVv3SG2JxGvJRx9Q/C5xEvGBX5gH3I49OeaJXaYrtDyUQ== X-Google-Smtp-Source: AGHT+IF+jR4VVogFOyMYacwANH61Q1whsUFMPHVI2X3QOlKb33ZPZ8uJZqFcH0fzcckiVLBHVlW+Q8YHxSJIEF/yYJY= X-Received: by 2002:a17:906:3cf2:b0:a27:246b:442c with SMTP id d18-20020a1709063cf200b00a27246b442cmr4035292ejh.97.1705532083591; Wed, 17 Jan 2024 14:54:43 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Mario Marietto Date: Wed, 17 Jan 2024 23:54:06 +0100 Message-ID: Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again To: David Chisnall , Mark Millard Cc: John F Carr , freebsd-arm , freebsd-hackers , FreeBSD Mailing List , "freebsd-xen@freebsd.org" , FreeBSD Current , Warner Losh , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/alternative; boundary="000000000000fedfbc060f2c216d" X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.98 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.98)[-0.979]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; FREEMAIL_TO(0.00)[freebsd.org,yahoo.com]; ARC_NA(0.00)[]; TO_DN_EQ_ADDR_SOME(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; RCVD_TLS_LAST(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; FROM_HAS_DN(0.00)[]; MISSING_XM_UA(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; MID_RHS_MATCH_FROMTLD(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; MLMMJ_DEST(0.00)[freebsd-arm@freebsd.org,freebsd-hackers@freebsd.org,freebsd-questions@freebsd.org,freebsd-xen@freebsd.org,freebsd-current@freebsd.org]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCPT_COUNT_SEVEN(0.00)[10]; RCVD_COUNT_ONE(0.00)[1]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::52b:from] X-Rspamd-Queue-Id: 4TFh5z3PbZz4BJ0 --000000000000fedfbc060f2c216d Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello to everyone. I'm trying to copy the Chromebook's SNOW source files that have been included on the FreeBSD 11 revision 269385 to the new FreeBSD 13 revision 373300. It has compiled correctly world,but when it starts to compile the kernel,it gives a lot of "unknown option" errors. Is there a way to fix them ? # svn co http://svn.freebsd.org/base/head@269385 ./head-269385 ; taken from this tutorial : https://wiki.freebsd.org/arm/Chromebook # svn co http://svn.freebsd.org/base/head ./head-373300 # cp ./head-269395/sys/arm/conf/CHROMEBOOK-SNOW ./head-373300/sys/arm/conf # cd ./head-373300 # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildworld buildkerne= l I tried also with : make TARGET_ARCH=3Darmv6 KERNCONF=3DCHROMEBOOK-SNOW buildworld buildkernel,but it didn't make any difference. ..... ..... -------------------------------------------------------------- >>> World build completed on Wed Jan 17 21:27:04 CET 2024 >>> World built in 14203 seconds, ncpu: 16 -------------------------------------------------------------- make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1" line 341: SYSTEM_COMPILER: lib clang will be built for bootstrapping a cross-compiler. make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1" line 346: SYSTEM_LINKER: libcl ang will be built for bootstrapping a cross-linker. -------------------------------------------------------------- >>> Kernel build for CHROMEBOOK-SNOW started on Wed Jan 17 21:27:04 CET 202= 4 -------------------------------------------------------------- =3D=3D=3D> CHROMEBOOK-SNOW mkdir -p /usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/sys -------------------------------------------------------------- >>> stage 1: configuring the kernel -------------------------------------------------------------- cd /mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/conf; PATH=3D/usr/obj/mnt/zroot2/zroot2/OS/Ch romebook/head-373300/arm.armv7/tmp/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chrome= book/head-373300/arm.armv 7/tmp/usr/sbin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.arm= v7/tmp/usr/bin:/usr/obj/m nt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/sbin:/u= sr/obj/mnt/zroot2/zroot2/ OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/bin:/usr/obj/mnt/zroot2/= zroot2/OS/Chromebook/head -373300/arm.armv7/tmp/legacy/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook/h= ead-373300/arm.armv7/tmp/ legacy/usr/libexec::/sbin:/bin:/usr/sbin:/usr/bin config -d /usr/obj/mnt/zroot2/zroot2/OS/Chromebo ok/head-373300/arm.armv7/sys/CHROMEBOOK-SNOW -I '/mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/a rm/conf' -I '/mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/conf' '/mnt/zroot2/zroot2/OS/Chro mebook/head-373300/sys/arm/conf/CHROMEBOOK-SNOW' WARNING: duplicate option `DEBUG' encountered. ./head-373300/sys/arm/conf/CHROMEBOOK-SNOW: unknown option "IPI_IRQ_END" / "IPI_IRQ_START / ARM_L2_PIPT" and so on... these options are included inside the file "std.exynos5250" (that I have copied from the old to the new source code). What I'm trying to do to stop these error is to comment the offending lines : nano ./head-373300/sys/arm/samsung/exynos/std.exynos5250 : #options IPI_IRQ_START=3D0 #options IPI_IRQ_END=3D15 #options ARM_L2_PIPT but I suspect that a lot of options will be missing and the more comments I will make,the more the chance that it will not work will increase. ... On Mon, Jan 15, 2024 at 7:48=E2=80=AFPM Mario Marietto wrote: > Hello. > > Do you have deleted forever the set of packages and ports for FreeBSD 11 > or you keep them stored in DVDs that I can buy or download for a small > amount of money ? If yes,where ? To rebuild everything is out of my > expertise. > > On Mon, Jan 15, 2024 at 7:15=E2=80=AFPM David Chisnall > wrote: > >> On 15 Jan 2024, at 16:46, Mario Marietto wrote: >> > >> > The ARM Chromebook is based on armv7,it is still recent. >> >> For reference, the ARMv7 architecture was introduced in 2005. The last >> cores that implemented the architecture were released in 2014. This is = not >> a =E2=80=98recent=E2=80=99 architecture, it=E2=80=99s one that=E2=80=99s= 19 years old and has been largely >> dead for several years. >> >> > But let's change perspective for a moment,don't think about the ARM >> Chromebook. My question is : how to upgrade FreeBSD when it goes EOL. >> >> Generally, run `freebsd-update`. This is a very different question from >> =E2=80=98how do I do a new install of an old an unsupported version?' >> >> > I ask this because there is a huge difference here between FreeBSD and >> Linux. Today if you need to use , for example Ubuntu 14.0, you can use i= t >> as is. Yes,there will be a lot of bugs,but it will work without crashes. >> But if you want to use an old FreeBSD system,nothing will work for you. >> So,do you know some methods to install even packages or ports ? You >> know,there are cases when you need to do some experiments so that you ca= n >> keep your machine off the internet,so you aren't scared that someone can >> compromise it. Totally prohibiting the users to use an old system,removi= ng >> ports and packages is not a choice that I approve of. And I'm not the on= ly >> one that thinks like this. >> >> If you want to use an old and unsupported version of FreeBSD, no one is >> stopping you, but: >> >> - You will need to build the releases. The source code is still in git= , >> you can. The scripts for building the release images are right there in >> the repo. Just grab the relevant release or releng branch and go. >> >> - You will need to build packages. Newer versions of the ports tree >> will not be tested with the older release, so you may need to use an old= er >> checkout of the ports tree. Poudriere will build a package repo for you= . >> >> In both cases, if you=E2=80=99re using older versions you almost certain= ly *will* >> have security vulnerabilities. The project strongly advises you not to = do >> this and not to blame us when you install known-insecure software and en= d >> up compromised. >> >> The project does not have enough active contributors to keep maintaining >> things indefinitely. This is why release have a five-year supported >> lifetime. If you want to pick up an old branch and maintain it, you=E2= =80=99re >> welcome to. In the past, companies have picked up old branches and >> maintained them for customers that had a dependency on them. If you wan= t >> to pay someone to maintain an old branch (and have deep pockets) then th= ere >> are probably a few companies that will happily take your money. >> >> Maintaining binaries is a slightly different issue, but it=E2=80=99s not= totally >> unrelated. Keeping old packages around consumes disk space and costs th= e >> project money (remember, every package is mirrored across the CDN, so th= is >> isn=E2=80=99t just a single disk). Even if it were free, philosophicall= y, I think >> making it easy for users to install known-insecure software is a bad ide= a >> but if you want to keep a package repo with out-of-date packages online >> indefinitely then you can. You can run Poudriere and even cross-compile >> from a fairly beefy cloud machine quite easily. >> >> It=E2=80=99s been a while since I did a full package build, but I would = guess >> that you could do a single package build (all ports) for about $50 on a >> cloud VM, more (2-3x) if it=E2=80=99s emulated. Storing the results for= a small >> number of users will cost around $10-20/month. If you think this is an >> important thing to do, then you are absolutely welcome to spend your own >> money on doing it. >> >> David >> >> > > -- > Mario. > --=20 Mario. --000000000000fedfbc060f2c216d Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hello to ever=
yone.

I'm trying to copy the Chromebook's SNOW source files = that have been included on the FreeBSD 11
revision 269385 to the new Fr= eeBSD 13 revision 373300. It has compiled correctly world,but when it
st= arts to compile the kernel,it gives a lot of "unknown option" err= ors. Is there a way to fix them ?

# svn co =
http:=
//svn.freebsd.org/base/head@269385 ./head-269385 ; taken from this tuto=
rial :

ht= tps://wiki.freebsd.org/arm/Chromebook
# svn co htt= p://svn.freebsd.org/base/head ./head-373300 # cp ./head-269395/sys/arm/conf/CHROMEBOOK-SNOW ./head-373300/sys/arm/conf # cd ./head-373300 # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildworld buildkerne= l

I tried also with :
make TARGET_ARCH=3Darmv6 KERNCONF= =3DCHROMEBOOK-SNOW buildworld buildkernel,but it
didn'= t make any difference.
.....
.....
--------------------------------------------------------------
>>> World build completed on Wed Jan 17 21:27:04 CET 2024
>>> World built in 14203 seconds, ncpu: 16
--------------------------------------------------------------
make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1&q=
uot; line 341: SYSTEM_COMPILER: lib
clang will be built for bootstrapping a cross-compiler.
make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1&q=
uot; line 346: SYSTEM_LINKER: libcl
ang will be built for bootstrapping a cross-linker.

--------------------------------------------------------------
>>> Kernel build for CHROMEBOOK-SNOW started on Wed Jan 17 21:27:0=
4 CET 2024
--------------------------------------------------------------
=3D=3D=3D> CHROMEBOOK-SNOW
mkdir -p /usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/sys

--------------------------------------------------------------
>>> stage 1: configuring the kernel
--------------------------------------------------------------
cd /mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/conf;  PATH=3D/usr/=
obj/mnt/zroot2/zroot2/OS/Ch
romebook/head-373300/arm.armv7/tmp/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chrome=
book/head-373300/arm.armv
7/tmp/usr/sbin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.arm=
v7/tmp/usr/bin:/usr/obj/m
nt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/sbin:/u=
sr/obj/mnt/zroot2/zroot2/
OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/bin:/usr/obj/mnt/zroot2/=
zroot2/OS/Chromebook/head
-373300/arm.armv7/tmp/legacy/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook/h=
ead-373300/arm.armv7/tmp/
legacy/usr/libexec::/sbin:/bin:/usr/sbin:/usr/bin  config  -d /usr/obj/mnt/=
zroot2/zroot2/OS/Chromebo
ok/head-373300/arm.armv7/sys/CHROMEBOOK-SNOW  -I '/mnt/zroot2/zroot2/OS=
/Chromebook/head-373300/sys/a
rm/conf' -I '/mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/c=
onf'  '/mnt/zroot2/zroot2/OS/Chro
mebook/head-373300/sys/arm/conf/CHROMEBOOK-SNOW'
WARNING: duplicate option `DEBUG' encountered.

./head-373300/sys/arm/conf/CHROMEBOOK-SNOW: unknown option "IPI_IRQ_EN= D" / "IPI_IRQ_START / ARM_L2_PIPT"
and so on..=
.

these options are included inside the file "std.ex=
ynos5250" (that I have copied from the old to the new
so=
urce code). What I'm trying to do to stop these error is to comment the=
 offending lines :

nano ./head-373300/sys/arm/samsung/exy= nos/std.exynos5250 :
#options IPI_IRQ_START=3D0
#options IPI_IRQ_END=3D15
#options = ARM_L2_PIPT

but I suspect that a lot= of options will be missing and the more comments I will make,the more the = chance that it will not work will increase. ...

On Mon, Jan 15, 2024= at 7:48=E2=80=AFPM Mario Marietto <marietto2008@gmail.com> wrote:
Hello.

Do you have deleted forever the set of packages and ports for FreeBS= D 11 or you keep them stored in DVDs that I can buy or download for a small= amount of money ? If yes,where ? To rebuild everything is out of my expert= ise.

On Mon, Jan 15, 2024 at 7:15=E2=80=AFPM David Chisnall <= theraven@freebsd.= org> wrote:
On 15 Jan 2024, at 16:46, Mario Marietto <marietto2008@gmail.com> wrote:
>
> The ARM Chromebook is based on armv7,it is still recent.

For reference, the ARMv7 architecture was introduced in 2005.=C2=A0 The las= t cores that implemented the architecture were released in 2014.=C2=A0 This= is not a =E2=80=98recent=E2=80=99 architecture, it=E2=80=99s one that=E2= =80=99s 19 years old and has been largely dead for several years.

> But let's change perspective for a moment,don't think about th= e ARM Chromebook. My question is : how to upgrade FreeBSD when it goes EOL.=

Generally, run `freebsd-update`.=C2=A0 This is a very different question fr= om =E2=80=98how do I do a new install of an old an unsupported version?'= ;

> I ask this because there is a huge difference here between FreeBSD and= Linux. Today if you need to use , for example Ubuntu 14.0, you can use it = as is. Yes,there will be a lot of bugs,but it will work without crashes.=C2= =A0 But if you want to use an old FreeBSD system,nothing will work for you.= So,do you know some methods to install even packages or ports ? You know,t= here are cases when you need to do some experiments so that you can keep yo= ur machine off the internet,so you aren't scared that someone can compr= omise it. Totally prohibiting the users to use an old system,removing ports= and packages is not a choice that I approve of. And I'm not the only o= ne that thinks like this.

If you want to use an old and unsupported version of FreeBSD, no one is sto= pping you, but:

=C2=A0- You will need to build the releases.=C2=A0 The source code is still= in git, you can.=C2=A0 The scripts for building the release images are rig= ht there in the repo.=C2=A0 Just grab the relevant release or releng branch= and go.

=C2=A0- You will need to build packages.=C2=A0 Newer versions of the ports = tree will not be tested with the older release, so you may need to use an o= lder checkout of the ports tree.=C2=A0 Poudriere will build a package repo = for you.=C2=A0

In both cases, if you=E2=80=99re using older versions you almost certainly = *will* have security vulnerabilities.=C2=A0 The project strongly advises yo= u not to do this and not to blame us when you install known-insecure softwa= re and end up compromised.

The project does not have enough active contributors to keep maintaining th= ings indefinitely.=C2=A0 This is why release have a five-year supported lif= etime.=C2=A0 If you want to pick up an old branch and maintain it, you=E2= =80=99re welcome to.=C2=A0 In the past, companies have picked up old branch= es and maintained them for customers that had a dependency on them.=C2=A0 I= f you want to pay someone to maintain an old branch (and have deep pockets)= then there are probably a few companies that will happily take your money.=

Maintaining binaries is a slightly different issue, but it=E2=80=99s not to= tally unrelated.=C2=A0 Keeping old packages around consumes disk space and = costs the project money (remember, every package is mirrored across the CDN= , so this isn=E2=80=99t just a single disk).=C2=A0 Even if it were free, ph= ilosophically, I think making it easy for users to install known-insecure s= oftware is a bad idea but if you want to keep a package repo with out-of-da= te packages online indefinitely then you can.=C2=A0 You can run Poudriere a= nd even cross-compile from a fairly beefy cloud machine quite easily.

It=E2=80=99s been a while since I did a full package build, but I would gue= ss that you could do a single package build (all ports) for about $50 on a = cloud VM, more (2-3x) if it=E2=80=99s emulated.=C2=A0 Storing the results f= or a small number of users will cost around $10-20/month.=C2=A0 If you thin= k this is an important thing to do, then you are absolutely welcome to spen= d your own money on doing it.

David



--
Mario.


--
Mario.
--000000000000fedfbc060f2c216d-- From nobody Thu Jan 18 22:06:08 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGGzf3wYdz576gv for ; Thu, 18 Jan 2024 22:06:22 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-lj1-x232.google.com (mail-lj1-x232.google.com [IPv6:2a00:1450:4864:20::232]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGGzd5BHdz4s1t for ; Thu, 18 Jan 2024 22:06:21 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2ccec119587so2327491fa.0 for ; Thu, 18 Jan 2024 14:06:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705615579; x=1706220379; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=pXJ3dY6ZLqDhoUqyMmMZkZGPT7oc5+Tg3yKVUZN1kPM=; b=D/UQQO/R3zw+K5fenXpZ8BXbIrqBgMqKtg4TymTJYznqY1k/9i9lREZVwKo8lWIrAo OKQMMGMasC7ugWHdTSQ6rysA2ZH+xjMZgy2gmF7u3WK9RQbBMmhFGM4u7sLTx8HMDMfG c4RLBbY8Bacdf+RvR2xqe9MFuNNHRj+bOzrXoa9RIBxmDf7I8Zj4UbUscFbhYt49sAO8 Yuvgr5+gD0DN/PcxFtBxm14taJ01s3mQyOCpqCJ52jpqYgqvCpP5xzSwTe+baToRpZrh EoZJtYRGPZtxebca9uhWy0hOMnIYACQZ2i+K2QXe16hAv1q8+r8pnqMSK4WBpf8ogmaa kf+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705615579; x=1706220379; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=pXJ3dY6ZLqDhoUqyMmMZkZGPT7oc5+Tg3yKVUZN1kPM=; b=O3fB4SuRSRhMHP7OSOLPJVUvRZgNwoFanvrBWjfbegp4RorxmyFTmlOQVpxMQH7tQP Rdnkq2qjjVYS0zUAOquhMhcKzXrlanty4prmhq4GRFNUrqKliZU1FcJxM5sQy74ckYpE phDVT3Ooq9d/99M9AeeLDWFwceTrVjyzuCTDstuWFBweeRnZL52Uypl2MrLBopuUsPWE UPwIsBYJpTQE3+fYJOekjqrU7KleOHa4SuL9YjvH0qvnf+tUOZw/iBYXuDwdK57N522t ZOWGbpF04mGNoeUD/+F1QZfeMYYlCf8iNp8XH0Gr15hODkyi+AVZaa552CdGvoqr3eAP 9DAA== X-Gm-Message-State: AOJu0Yzi1fd3MdN8plOlT+l4vXK0MniMfc7IKf8nEyg34Q4nVKBL4eDO fWIe2hWMY1MB2WgqVG6hB6HL5cfwbNC6Cbn64+Eq+dsRiZhPXbwPf47cRN6VjNLI7+dJa2YLP/2 SE1Fgl6Mle5/UCXjeCgVMKPco90TGUhHkPU7fTA== X-Google-Smtp-Source: AGHT+IGZcP6eNjR4bYou33Z5k3wz16Xq6dT8rIoYRDvJxfn+9uAvnfuFOX7Y/TfI0aVtbEHsuez2NOoGmdvzjJzP+ZM= X-Received: by 2002:a2e:9c19:0:b0:2cd:f341:5150 with SMTP id s25-20020a2e9c19000000b002cdf3415150mr971764lji.13.1705615579512; Thu, 18 Jan 2024 14:06:19 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Warner Losh Date: Thu, 18 Jan 2024 15:06:08 -0700 Message-ID: Subject: Re: How to upgrade an EOL FreeBSD release or how to make it working again To: Mario Marietto Cc: David Chisnall , Mark Millard , John F Carr , freebsd-arm , freebsd-hackers , FreeBSD Mailing List , "freebsd-xen@freebsd.org" , FreeBSD Current , =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Content-Type: multipart/alternative; boundary="000000000000bd9405060f3f9248" X-Rspamd-Queue-Id: 4TGGzd5BHdz4s1t X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000bd9405060f3f9248 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Jan 17, 2024 at 3:54=E2=80=AFPM Mario Marietto wrote: > Hello to everyone. > > I'm trying to copy the Chromebook's SNOW source files that have been incl= uded on the FreeBSD 11 > revision 269385 to the new FreeBSD 13 revision 373300. It has compiled co= rrectly world,but when it > starts to compile the kernel,it gives a lot of "unknown option" errors. I= s there a way to fix them ? > > # svn co http://svn.freebsd.org/base/head@269385 ./head-269385 ; taken fr= om this tutorial : > > https://wiki.freebsd.org/arm/Chromebook > > # svn co http://svn.freebsd.org/base/head ./head-373300 > # cp ./head-269395/sys/arm/conf/CHROMEBOOK-SNOW ./head-373300/sys/arm/con= f > # cd ./head-373300 > # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildworld buildker= nel > > I tried also with : make TARGET_ARCH=3Darmv6 KERNCONF=3DCHROMEBOOK-SNOW b= uildworld buildkernel,but it > didn't make any difference. > > ..... > ..... > -------------------------------------------------------------- > >>> World build completed on Wed Jan 17 21:27:04 CET 2024 > >>> World built in 14203 seconds, ncpu: 16 > -------------------------------------------------------------- > make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1" lin= e 341: SYSTEM_COMPILER: lib > clang will be built for bootstrapping a cross-compiler. > make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1" lin= e 346: SYSTEM_LINKER: libcl > ang will be built for bootstrapping a cross-linker. > > -------------------------------------------------------------- > >>> Kernel build for CHROMEBOOK-SNOW started on Wed Jan 17 21:27:04 CET 2= 024 > -------------------------------------------------------------- > =3D=3D=3D> CHROMEBOOK-SNOW > mkdir -p /usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/s= ys > > -------------------------------------------------------------- > >>> stage 1: configuring the kernel > -------------------------------------------------------------- > cd /mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/conf; PATH=3D/us= r/obj/mnt/zroot2/zroot2/OS/Ch > romebook/head-373300/arm.armv7/tmp/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chro= mebook/head-373300/arm.armv > 7/tmp/usr/sbin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.a= rmv7/tmp/usr/bin:/usr/obj/m > nt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/sbin:= /usr/obj/mnt/zroot2/zroot2/ > OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/bin:/usr/obj/mnt/zroot= 2/zroot2/OS/Chromebook/head > -373300/arm.armv7/tmp/legacy/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook= /head-373300/arm.armv7/tmp/ > legacy/usr/libexec::/sbin:/bin:/usr/sbin:/usr/bin config -d /usr/obj/mn= t/zroot2/zroot2/OS/Chromebo > ok/head-373300/arm.armv7/sys/CHROMEBOOK-SNOW -I '/mnt/zroot2/zroot2/OS/C= hromebook/head-373300/sys/a > rm/conf' -I '/mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/conf' = '/mnt/zroot2/zroot2/OS/Chro > mebook/head-373300/sys/arm/conf/CHROMEBOOK-SNOW' > WARNING: duplicate option `DEBUG' encountered. > > ./head-373300/sys/arm/conf/CHROMEBOOK-SNOW: unknown option "IPI_IRQ_END" = / "IPI_IRQ_START / ARM_L2_PIPT" > > and so on... > > these options are included inside the file "std.exynos5250" (that I have = copied from the old to the new > > source code). What I'm trying to do to stop these error is to comment the= offending lines : > > > nano ./head-373300/sys/arm/samsung/exynos/std.exynos5250 : > > #options IPI_IRQ_START=3D0 > #options IPI_IRQ_END=3D15 > > These likely require changes to adopt exynos to INTRNG. > #options ARM_L2_PIPT > > This is likely a nop. It was for ARMv4/5 only and google tells me exynos5250 was a dual core Cortex A-15, which is armv7. > but I suspect that a lot of options will be missing and the more comments > I will make,the more the chance that it will not work will increase. ... > There's likely a lot of work here... Warner > > On Mon, Jan 15, 2024 at 7:48=E2=80=AFPM Mario Marietto > wrote: > >> Hello. >> >> Do you have deleted forever the set of packages and ports for FreeBSD 11 >> or you keep them stored in DVDs that I can buy or download for a small >> amount of money ? If yes,where ? To rebuild everything is out of my >> expertise. >> >> On Mon, Jan 15, 2024 at 7:15=E2=80=AFPM David Chisnall >> wrote: >> >>> On 15 Jan 2024, at 16:46, Mario Marietto wrote= : >>> > >>> > The ARM Chromebook is based on armv7,it is still recent. >>> >>> For reference, the ARMv7 architecture was introduced in 2005. The last >>> cores that implemented the architecture were released in 2014. This is= not >>> a =E2=80=98recent=E2=80=99 architecture, it=E2=80=99s one that=E2=80=99= s 19 years old and has been largely >>> dead for several years. >>> >>> > But let's change perspective for a moment,don't think about the ARM >>> Chromebook. My question is : how to upgrade FreeBSD when it goes EOL. >>> >>> Generally, run `freebsd-update`. This is a very different question fro= m >>> =E2=80=98how do I do a new install of an old an unsupported version?' >>> >>> > I ask this because there is a huge difference here between FreeBSD an= d >>> Linux. Today if you need to use , for example Ubuntu 14.0, you can use = it >>> as is. Yes,there will be a lot of bugs,but it will work without crashes= . >>> But if you want to use an old FreeBSD system,nothing will work for you. >>> So,do you know some methods to install even packages or ports ? You >>> know,there are cases when you need to do some experiments so that you c= an >>> keep your machine off the internet,so you aren't scared that someone ca= n >>> compromise it. Totally prohibiting the users to use an old system,remov= ing >>> ports and packages is not a choice that I approve of. And I'm not the o= nly >>> one that thinks like this. >>> >>> If you want to use an old and unsupported version of FreeBSD, no one is >>> stopping you, but: >>> >>> - You will need to build the releases. The source code is still in >>> git, you can. The scripts for building the release images are right th= ere >>> in the repo. Just grab the relevant release or releng branch and go. >>> >>> - You will need to build packages. Newer versions of the ports tree >>> will not be tested with the older release, so you may need to use an ol= der >>> checkout of the ports tree. Poudriere will build a package repo for yo= u. >>> >>> In both cases, if you=E2=80=99re using older versions you almost certai= nly >>> *will* have security vulnerabilities. The project strongly advises you= not >>> to do this and not to blame us when you install known-insecure software= and >>> end up compromised. >>> >>> The project does not have enough active contributors to keep maintainin= g >>> things indefinitely. This is why release have a five-year supported >>> lifetime. If you want to pick up an old branch and maintain it, you=E2= =80=99re >>> welcome to. In the past, companies have picked up old branches and >>> maintained them for customers that had a dependency on them. If you wa= nt >>> to pay someone to maintain an old branch (and have deep pockets) then t= here >>> are probably a few companies that will happily take your money. >>> >>> Maintaining binaries is a slightly different issue, but it=E2=80=99s no= t totally >>> unrelated. Keeping old packages around consumes disk space and costs t= he >>> project money (remember, every package is mirrored across the CDN, so t= his >>> isn=E2=80=99t just a single disk). Even if it were free, philosophical= ly, I think >>> making it easy for users to install known-insecure software is a bad id= ea >>> but if you want to keep a package repo with out-of-date packages online >>> indefinitely then you can. You can run Poudriere and even cross-compil= e >>> from a fairly beefy cloud machine quite easily. >>> >>> It=E2=80=99s been a while since I did a full package build, but I would= guess >>> that you could do a single package build (all ports) for about $50 on a >>> cloud VM, more (2-3x) if it=E2=80=99s emulated. Storing the results fo= r a small >>> number of users will cost around $10-20/month. If you think this is an >>> important thing to do, then you are absolutely welcome to spend your ow= n >>> money on doing it. >>> >>> David >>> >>> >> >> -- >> Mario. >> > > > -- > Mario. > --000000000000bd9405060f3f9248 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Wed, Jan 17, 2024 at 3:54=E2=80=AF= PM Mario Marietto <marietto200= 8@gmail.com> wrote:
He=
llo to everyone.

I'm trying to copy the Chromebook's SNOW so= urce files that have been included on the FreeBSD 11
revision 269385 to= the new FreeBSD 13 revision 373300. It has compiled correctly world,but wh= en it
starts to compile the kernel,it gives a lot of "unknown optio= n" errors. Is there a way to fix them ?

# svn co http://svn.freebsd.org/base/head@269385 ./head-269385 ; taken fro=
m this tutorial :

https://wiki.freebsd.org/arm/Chromebook
<= code> # svn co htt= p://svn.freebsd.org/base/head ./head-373300 # cp ./head-269395/sys/arm/conf/CHROMEBOOK-SNOW ./head-373300/sys/arm/conf # cd ./head-373300 # make TARGET_ARCH=3Darmv7 KERNCONF=3DCHROMEBOOK-SNOW buildworld buildkerne= l

I tried also with : make TARGET_ARCH=3Darmv6 KERNCONF= =3DCHROMEBOOK-SNOW buildworld buildkernel,but it
didn'= t make any difference.
.....
.....
--------------------------------------------------------------
>>> World build completed on Wed Jan 17 21:27:04 CET 2024
>>> World built in 14203 seconds, ncpu: 16
--------------------------------------------------------------
make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1&q=
uot; line 341: SYSTEM_COMPILER: lib
clang will be built for bootstrapping a cross-compiler.
make[1]: "/mnt/zroot2/zroot2/OS/Chromebook/head-373300/Makefile.inc1&q=
uot; line 346: SYSTEM_LINKER: libcl
ang will be built for bootstrapping a cross-linker.

--------------------------------------------------------------
>>> Kernel build for CHROMEBOOK-SNOW started on Wed Jan 17 21:27:0=
4 CET 2024
--------------------------------------------------------------
=3D=3D=3D> CHROMEBOOK-SNOW
mkdir -p /usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/sys

--------------------------------------------------------------
>>> stage 1: configuring the kernel
--------------------------------------------------------------
cd /mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/conf;  PATH=3D/usr/=
obj/mnt/zroot2/zroot2/OS/Ch
romebook/head-373300/arm.armv7/tmp/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chrome=
book/head-373300/arm.armv
7/tmp/usr/sbin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook/head-373300/arm.arm=
v7/tmp/usr/bin:/usr/obj/m
nt/zroot2/zroot2/OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/sbin:/u=
sr/obj/mnt/zroot2/zroot2/
OS/Chromebook/head-373300/arm.armv7/tmp/legacy/usr/bin:/usr/obj/mnt/zroot2/=
zroot2/OS/Chromebook/head
-373300/arm.armv7/tmp/legacy/bin:/usr/obj/mnt/zroot2/zroot2/OS/Chromebook/h=
ead-373300/arm.armv7/tmp/
legacy/usr/libexec::/sbin:/bin:/usr/sbin:/usr/bin  config  -d /usr/obj/mnt/=
zroot2/zroot2/OS/Chromebo
ok/head-373300/arm.armv7/sys/CHROMEBOOK-SNOW  -I '/mnt/zroot2/zroot2/OS=
/Chromebook/head-373300/sys/a
rm/conf' -I '/mnt/zroot2/zroot2/OS/Chromebook/head-373300/sys/arm/c=
onf'  '/mnt/zroot2/zroot2/OS/Chro
mebook/head-373300/sys/arm/conf/CHROMEBOOK-SNOW'
WARNING: duplicate option `DEBUG' encountered.

./head-373300/sys/arm/conf/CHROMEBOOK-SNOW: unknown option "IPI_IRQ_EN= D" / "IPI_IRQ_START / ARM_L2_PIPT"
and so on..=
.

these options are included inside the file "std.ex=
ynos5250" (that I have copied from the old to the new
so=
urce code). What I'm trying to do to stop these error is to comment the=
 offending lines :

nano ./head-373300/sys/arm/samsung/exy= nos/std.exynos5250 :
#options IPI_IRQ_START=3D0
#options IPI_IRQ_END=3D15

These likely require changes= to adopt exynos to INTRNG.
=C2=A0
#optio=
ns    ARM_L2_PIPT
This is likely a= nop. It was for ARMv4/5 only and google tells me exynos5250 was a dual cor= e Cortex A-15, which is armv7.

=C2=A0
but I susp= ect that a lot of options will be missing and the more comments I will make= ,the more the chance that it will not work will increase. ...

There's likely a lot of work here...

Warner
=C2=A0

On Mon, Jan 15, 2024 at 7:48=E2=80=AFPM Mario Marietto = <marietto200= 8@gmail.com> wrote:
Hello.

Do you hav= e deleted forever the set of packages and ports for FreeBSD 11 or you keep = them stored in DVDs that I can buy or download for a small amount of money = ? If yes,where ? To rebuild everything is out of my expertise.

On= Mon, Jan 15, 2024 at 7:15=E2=80=AFPM David Chisnall <theraven@freebsd.org> wrote:=
On 15 Jan 2024,= at 16:46, Mario Marietto <marietto2008@gmail.com> wrote:
>
> The ARM Chromebook is based on armv7,it is still recent.

For reference, the ARMv7 architecture was introduced in 2005.=C2=A0 The las= t cores that implemented the architecture were released in 2014.=C2=A0 This= is not a =E2=80=98recent=E2=80=99 architecture, it=E2=80=99s one that=E2= =80=99s 19 years old and has been largely dead for several years.

> But let's change perspective for a moment,don't think about th= e ARM Chromebook. My question is : how to upgrade FreeBSD when it goes EOL.=

Generally, run `freebsd-update`.=C2=A0 This is a very different question fr= om =E2=80=98how do I do a new install of an old an unsupported version?'= ;

> I ask this because there is a huge difference here between FreeBSD and= Linux. Today if you need to use , for example Ubuntu 14.0, you can use it = as is. Yes,there will be a lot of bugs,but it will work without crashes.=C2= =A0 But if you want to use an old FreeBSD system,nothing will work for you.= So,do you know some methods to install even packages or ports ? You know,t= here are cases when you need to do some experiments so that you can keep yo= ur machine off the internet,so you aren't scared that someone can compr= omise it. Totally prohibiting the users to use an old system,removing ports= and packages is not a choice that I approve of. And I'm not the only o= ne that thinks like this.

If you want to use an old and unsupported version of FreeBSD, no one is sto= pping you, but:

=C2=A0- You will need to build the releases.=C2=A0 The source code is still= in git, you can.=C2=A0 The scripts for building the release images are rig= ht there in the repo.=C2=A0 Just grab the relevant release or releng branch= and go.

=C2=A0- You will need to build packages.=C2=A0 Newer versions of the ports = tree will not be tested with the older release, so you may need to use an o= lder checkout of the ports tree.=C2=A0 Poudriere will build a package repo = for you.=C2=A0

In both cases, if you=E2=80=99re using older versions you almost certainly = *will* have security vulnerabilities.=C2=A0 The project strongly advises yo= u not to do this and not to blame us when you install known-insecure softwa= re and end up compromised.

The project does not have enough active contributors to keep maintaining th= ings indefinitely.=C2=A0 This is why release have a five-year supported lif= etime.=C2=A0 If you want to pick up an old branch and maintain it, you=E2= =80=99re welcome to.=C2=A0 In the past, companies have picked up old branch= es and maintained them for customers that had a dependency on them.=C2=A0 I= f you want to pay someone to maintain an old branch (and have deep pockets)= then there are probably a few companies that will happily take your money.=

Maintaining binaries is a slightly different issue, but it=E2=80=99s not to= tally unrelated.=C2=A0 Keeping old packages around consumes disk space and = costs the project money (remember, every package is mirrored across the CDN= , so this isn=E2=80=99t just a single disk).=C2=A0 Even if it were free, ph= ilosophically, I think making it easy for users to install known-insecure s= oftware is a bad idea but if you want to keep a package repo with out-of-da= te packages online indefinitely then you can.=C2=A0 You can run Poudriere a= nd even cross-compile from a fairly beefy cloud machine quite easily.

It=E2=80=99s been a while since I did a full package build, but I would gue= ss that you could do a single package build (all ports) for about $50 on a = cloud VM, more (2-3x) if it=E2=80=99s emulated.=C2=A0 Storing the results f= or a small number of users will cost around $10-20/month.=C2=A0 If you thin= k this is an important thing to do, then you are absolutely welcome to spen= d your own money on doing it.

David



--
Mario.


--
Mario.
--000000000000bd9405060f3f9248-- From nobody Fri Jan 19 11:10:47 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGcNr2XFQz2tqhv; Fri, 19 Jan 2024 11:10:52 +0000 (UTC) (envelope-from rozhuk.im@gmail.com) Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGcNq2TdXz4cbv; Fri, 19 Jan 2024 11:10:51 +0000 (UTC) (envelope-from rozhuk.im@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b=mQtbMyum; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of rozhuk.im@gmail.com designates 2a00:1450:4864:20::42d as permitted sender) smtp.mailfrom=rozhuk.im@gmail.com Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-33921b8988fso318699f8f.3; Fri, 19 Jan 2024 03:10:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705662649; x=1706267449; darn=freebsd.org; h=content-transfer-encoding:mime-version:message-id:subject:cc:to :date:from:from:to:cc:subject:date:message-id:reply-to; bh=f74U4ZW/gRhjC5Kr5GZaLWL1OfKxzRZp7MIJDnCDrHQ=; b=mQtbMyumo+rwEmupSQmcuNKFcEbQ9JbqT6uTNb+sk/PlcW0fxUXxp8HCkkIlawKI+J LW7Q+YaSPyS+2U001wQZSBplKqUaExLJK7JAOM3tjYnpdN586JksFjJerKjBvJboQ1C4 bg6quhcwnyFDJZxkrqB5k9RPcCxAH3Zs8lm+MzJnES10dhkcPybXxIQiqPjN9qgdVz72 ZCmBBXtdC8g86nPsRexuolmnub2oY/pckmCUCwFW0H/gqvrBnIKV0wQsXjvoxJgJNe6l K+OSHS7RV9PE3dnHOcXfqaGzpd7oM999wU4f8QDuLQjTT70WXRdoj9l58a2swJfpGXgw oNuw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705662649; x=1706267449; h=content-transfer-encoding:mime-version:message-id:subject:cc:to :date:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=f74U4ZW/gRhjC5Kr5GZaLWL1OfKxzRZp7MIJDnCDrHQ=; b=KMoEjkxRI8he6swjm48np4+iKchoGKAZ4LpoZJ5P4/ZeAdnhTFCCW4XFvOkLF7HCd3 45BM3O9rY9bIzVFIPZqPCSw4mlCBFc4MR42hp5lBYPxmJdFWgibAw6B8GbRyzp5lVGop t8yxOqnQZjU1RMkTa4VYm/4C4XW/P8nhJD+UAOQ3HCu+cGYjkDsD3bgFXZf0wJMn6HJn npSLGHVp5+RSa8oW2221yi93tU3bwdtNSQoICHxdO8ym8/coy2RkAto6K1Ftdy5Zj9bH 1BlK/DKEO/Y+pYJkgYxxel+oNl6KCI8kCldIMrX+o8U+W1NfsIqTjigEY+rglpQQ/2IK kT6w== X-Gm-Message-State: AOJu0YzVqTkPVlxz2t4ZnS/0MHBaklDavM0MNznoNSbJRb1tBAwvf7rY +3rWkHRplGfKmbrrTxNkyhffyA9Nt6+suvNHL+2hGGvf6NT6zLcpLsZZ1tN1/Sc= X-Google-Smtp-Source: AGHT+IGKKyzp1IMrhXnyTln7RLrMHZ5KqTiOfjNfp2DY2TYQWRfS5z2omJXkWgBI6Q21YPk99zYyBA== X-Received: by 2002:adf:f645:0:b0:337:c654:c822 with SMTP id x5-20020adff645000000b00337c654c822mr1486738wrp.127.1705662649375; Fri, 19 Jan 2024 03:10:49 -0800 (PST) Received: from rimwks.local ([2001:470:1f15:3d8:80e3:6e27:b43a:1e50]) by smtp.gmail.com with ESMTPSA id a1-20020a5d5081000000b00337d9b772c6sm1753180wrt.37.2024.01.19.03.10.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 19 Jan 2024 03:10:49 -0800 (PST) From: Rozhuk Ivan X-Google-Original-From: Rozhuk Ivan Date: Fri, 19 Jan 2024 13:10:47 +0200 To: FreeBSD Hackers Cc: rozhuk.im@gmail.com, FreeBSD Mailing List Subject: kcmp implementation for mesa Message-ID: <20240119131047.6975f574@rimwks.local> X-Mailer: Claws Mail 4.1.1 (GTK 3.24.38; amd64-portbld-freebsd14.0) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spamd-Bar: --- X-Spamd-Result: default: False [-4.00 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36:c]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; MIME_GOOD(-0.10)[text/plain]; RCVD_TLS_LAST(0.00)[]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; TAGGED_FROM(0.00)[]; TO_DN_SOME(0.00)[]; ARC_NA(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; MIME_TRACE(0.00)[0:+]; FREEMAIL_CC(0.00)[gmail.com,freebsd.org]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org,freebsd-ports@freebsd.org]; RCVD_VIA_SMTP_AUTH(0.00)[]; TAGGED_RCPT(0.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::42d:from] X-Rspamd-Queue-Id: 4TGcNq2TdXz4cbv Hi! graphics/mesa-* uses SYS_kcmp [1] to compare two fds: int os_same_file_description(int fd1, int fd2) { pid_t pid = getpid(); /* Same file descriptor trivially implies same file description */ if (fd1 == fd2) return 0; return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2); } FreeBSD does not implemet this and we got in terminal: "amdgpu: os_same_file_description couldn't determine if two DRM fds reference the same file description." Mesa say: /* DRM file descriptors, file descriptions and buffer sharing. * * amdgpu_device_initialize first argument is a file descriptor (fd) * representing a specific GPU. * If a fd is duplicated using os_dupfd_cloexec, * the file description will remain the same (os_same_file_description will * return 0). * But if the same device is re-opened, the fd and the file description will * be different. * * amdgpu_screen_winsys's fd tracks the file description which was * given to amdgpu_winsys_create. This is the fd used by the application * using the driver and may be used in other ioctl (eg: drmModeAddFB) * * amdgpu_winsys's fd is the file description used to initialize the * device handle in libdrm_amdgpu. * * The 2 fds can be different, even in systems with a single GPU, eg: if * radv is initialized before radeonsi. * * This fd tracking is useful for buffer sharing because KMS/GEM handles are * specific to a DRM file description, i.e. the same handle value may refer * to different underlying BOs in different DRM file descriptions. * As an example, if an app wants to use drmModeAddFB it'll need a KMS handle * valid for its fd (== amdgpu_screen_winsys::fd). * If both fds are identical, there's nothing to do: bo->u.real.kms_handle * can be used directly (see amdgpu_bo_get_handle). * If they're different, the BO has to be exported from the device fd as * a dma-buf, then imported from the app fd as a KMS handle. */ I do few checks with dup() and os_dupfd_cloexec() and code show that fd equal. Does this implementation will do that mesa expects? #include #include int os_same_file_description(int fd1, int fd2) { struct kinfo_file kif1, kif2; /* Same file descriptor trivially implies same file description */ if (fd1 == fd2) return (0); kif1.kf_structsize = sizeof(kif1); kif2.kf_structsize = sizeof(kif2); if (-1 == fcntl(fd1, F_KINFO, &kif1) || -1 == fcntl(fd2, F_KINFO, &kif2)) return (-1); if (kif1.kf_type != kif2.kf_type || 0 != memcmp(&kif1.kf_path, &kif2.kf_path, sizeof(kif1.kf_path))) return (3); switch (kif1.kf_type) { case KF_TYPE_VNODE: if (0 == memcmp(&kif1.kf_un.kf_file, &kif2.kf_un.kf_file, sizeof(kif1.kf_un.kf_file))) return (0); return (3); case KF_TYPE_SOCKET: if (0 == memcmp(&kif1.kf_un.kf_sock, &kif2.kf_un.kf_sock, sizeof(kif1.kf_un.kf_sock))) return (0); return (3); case KF_TYPE_PIPE: if (0 == memcmp(&kif1.kf_un.kf_pipe, &kif2.kf_un.kf_pipe, sizeof(kif1.kf_un.kf_pipe))) return (0); return (3); //case KF_TYPE_FIFO: case KF_TYPE_KQUEUE: if (0 == memcmp(&kif1.kf_un.kf_kqueue, &kif2.kf_un.kf_kqueue, sizeof(kif1.kf_un.kf_kqueue))) return (0); return (3); //case KF_TYPE_MQUEUE: //case KF_TYPE_SHM: case KF_TYPE_SEM: if (0 == memcmp(&kif1.kf_un.kf_sem, &kif2.kf_un.kf_sem, sizeof(kif1.kf_un.kf_sem))) return (0); return (3); case KF_TYPE_PTS: if (0 == memcmp(&kif1.kf_un.kf_pts, &kif2.kf_un.kf_pts, sizeof(kif1.kf_un.kf_pts))) return (0); return (3); case KF_TYPE_PROCDESC: if (0 == memcmp(&kif1.kf_un.kf_proc, &kif2.kf_un.kf_proc, sizeof(kif1.kf_un.kf_proc))) return (0); return (3); //case KF_TYPE_DEV: case KF_TYPE_EVENTFD: if (0 == memcmp(&kif1.kf_un.kf_eventfd, &kif2.kf_un.kf_eventfd, sizeof(kif1.kf_un.kf_eventfd))) return (0); return (3); case KF_TYPE_TIMERFD: if (0 == memcmp(&kif1.kf_un.kf_timerfd, &kif2.kf_un.kf_timerfd, sizeof(kif1.kf_un.kf_timerfd))) return (0); return (3); } /* Otherwise we can't tell */ return (-1); } Refs: 1. https://man7.org/linux/man-pages/man2/kcmp.2.html From nobody Fri Jan 19 18:34:31 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGpF32X0bz576Lp; Fri, 19 Jan 2024 18:34:47 +0000 (UTC) (envelope-from mizhka@gmail.com) Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGpF22WQ5z4dvj; Fri, 19 Jan 2024 18:34:46 +0000 (UTC) (envelope-from mizhka@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20230601 header.b="Hm48qQ/g"; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx1.freebsd.org: domain of mizhka@gmail.com designates 2a00:1450:4864:20::535 as permitted sender) smtp.mailfrom=mizhka@gmail.com Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-55a38fb45c1so1281614a12.1; Fri, 19 Jan 2024 10:34:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705689284; x=1706294084; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=m6ONPr5ZQX4QeQUuaQqeX74krh7egSRYnWLqtF1BZqc=; b=Hm48qQ/gXHaPMxx3lBDq0wzNwCIGbDfuaGgYlNEUjQIhaIkqFO87B+qvTxVnoQkkFe dHegNsF0PxMqYz7CHV1ExFyiyBWc2mKul1Ix72aj3S0m1kDX0k0XsHBmamt0d6MOV+ru KLO1D8IG8UgQdxLO564TDbe5OKiyQiWAqv71pce7dQ1LM1wSW3RatoB1FKwQ+h55Z9jL S434q/yQAY7PJ8EPfocPE+o2WG4w0/54U4DGWcKSJKYjD8AiKERvR1ZshfkSnZrFa6Pd mtve+AQ7hl/szLR5OpTkSDB+QwyUZCZSnMdGylXedH2e2mToaqiGbkVgxa6OZDlCKBiX 8U0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705689284; x=1706294084; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=m6ONPr5ZQX4QeQUuaQqeX74krh7egSRYnWLqtF1BZqc=; b=d99zFWOyajQmKnnIVdlNmjI0M6TUfEVfB6oSHHh21CMlrsWjZc4Ubk3E07xU708oDF v28QS0GQEgGu5uUHq/O5MpEohnnlvdyUd92OoVzT08Auntqr02GMEKC2nnd3FjcDiOMA c3BufLTFoVKKc/FtwmSW7QHXEmE6gw5ppwBKFDgivt710wzqu9xrKpENY2fr83q/YtqF cJa7AV6h02H9uBzGdNPAQkSAYxbqBNXszpPt5wa6pAtjAcLwPnYPSG1qIC14aqNa32Nl 9qBtIeX1h2udcSjYho9i9q4woI4dQ/67H15HPtCRbYRuoiFGwLyDRlq5xG1dEr3j7ckZ GSOA== X-Gm-Message-State: AOJu0YzSo00adEsxEDHvwt53i2H93QME1wQKzIDz0gsE01byT8d7Pa/i uctmT/mi/iJonVTKFGyP1B3Aa+8FoY8PYTwpv9Rova+ZkXSB9vKFlckbZTcZdgCIJLFGLA4Q1fv 6t2MILf76uFDhZQyjW7tcI/52VgrN4ECF X-Google-Smtp-Source: AGHT+IHkj4ZUxv8YBGGJ6z6cTQ/sPbs6OLULHbadD290+02nuBE7/gZFoLfJrLvVL2htpoKwHbSoVObK4dMZVmt3gJ0= X-Received: by 2002:a05:6402:35cd:b0:559:fa35:dadc with SMTP id z13-20020a05640235cd00b00559fa35dadcmr118193edc.77.1705689284112; Fri, 19 Jan 2024 10:34:44 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <20240119131047.6975f574@rimwks.local> In-Reply-To: <20240119131047.6975f574@rimwks.local> From: Michael Zhilin Date: Fri, 19 Jan 2024 21:34:31 +0300 Message-ID: Subject: Re: kcmp implementation for mesa To: Rozhuk Ivan Cc: FreeBSD Hackers , FreeBSD Mailing List Content-Type: multipart/alternative; boundary="000000000000e07473060f50bb6c" X-Spamd-Bar: --- X-Spamd-Result: default: False [-4.00 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20230601]; R_SPF_ALLOW(-0.20)[+ip6:2a00:1450:4000::/36]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; RCVD_TLS_LAST(0.00)[]; TO_DN_ALL(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; FREEMAIL_TO(0.00)[gmail.com]; FREEMAIL_FROM(0.00)[gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; DKIM_TRACE(0.00)[gmail.com:+]; MISSING_XM_UA(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::535:from]; MID_RHS_MATCH_FROMTLD(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCPT_COUNT_THREE(0.00)[3]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org,freebsd-ports@freebsd.org]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; TAGGED_RCPT(0.00)[]; FREEFALL_USER(0.00)[mizhka]; RCVD_COUNT_ONE(0.00)[1]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim] X-Rspamd-Queue-Id: 4TGpF22WQ5z4dvj --000000000000e07473060f50bb6c Content-Type: text/plain; charset="UTF-8" Hi Ivan, Looks good. Could you please put patch on reviews.freebsd.org? Thx, Michael On Fri, 19 Jan 2024, 14:11 Rozhuk Ivan, wrote: > Hi! > > > graphics/mesa-* uses SYS_kcmp [1] to compare two fds: > > int > os_same_file_description(int fd1, int fd2) > { > pid_t pid = getpid(); > > /* Same file descriptor trivially implies same file description */ > if (fd1 == fd2) > return 0; > > return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2); > } > > FreeBSD does not implemet this and we got in terminal: > "amdgpu: os_same_file_description couldn't determine if two DRM fds > reference the same file description." > > > Mesa say: > /* DRM file descriptors, file descriptions and buffer sharing. > * > * amdgpu_device_initialize first argument is a file descriptor (fd) > * representing a specific GPU. > * If a fd is duplicated using os_dupfd_cloexec, > * the file description will remain the same (os_same_file_description will > * return 0). > * But if the same device is re-opened, the fd and the file description > will > * be different. > * > * amdgpu_screen_winsys's fd tracks the file description which was > * given to amdgpu_winsys_create. This is the fd used by the application > * using the driver and may be used in other ioctl (eg: drmModeAddFB) > * > * amdgpu_winsys's fd is the file description used to initialize the > * device handle in libdrm_amdgpu. > * > * The 2 fds can be different, even in systems with a single GPU, eg: if > * radv is initialized before radeonsi. > * > * This fd tracking is useful for buffer sharing because KMS/GEM handles > are > * specific to a DRM file description, i.e. the same handle value may refer > * to different underlying BOs in different DRM file descriptions. > * As an example, if an app wants to use drmModeAddFB it'll need a KMS > handle > * valid for its fd (== amdgpu_screen_winsys::fd). > * If both fds are identical, there's nothing to do: bo->u.real.kms_handle > * can be used directly (see amdgpu_bo_get_handle). > * If they're different, the BO has to be exported from the device fd as > * a dma-buf, then imported from the app fd as a KMS handle. > */ > > > > I do few checks with dup() and os_dupfd_cloexec() and code show that fd > equal. > > Does this implementation will do that mesa expects? > > > #include > #include > > int > os_same_file_description(int fd1, int fd2) { > struct kinfo_file kif1, kif2; > > /* Same file descriptor trivially implies same file description */ > if (fd1 == fd2) > return (0); > > kif1.kf_structsize = sizeof(kif1); > kif2.kf_structsize = sizeof(kif2); > if (-1 == fcntl(fd1, F_KINFO, &kif1) || > -1 == fcntl(fd2, F_KINFO, &kif2)) > return (-1); > > if (kif1.kf_type != kif2.kf_type || > 0 != memcmp(&kif1.kf_path, &kif2.kf_path, > sizeof(kif1.kf_path))) > return (3); > > switch (kif1.kf_type) { > case KF_TYPE_VNODE: > if (0 == memcmp(&kif1.kf_un.kf_file, &kif2.kf_un.kf_file, > sizeof(kif1.kf_un.kf_file))) > return (0); > return (3); > case KF_TYPE_SOCKET: > if (0 == memcmp(&kif1.kf_un.kf_sock, &kif2.kf_un.kf_sock, > sizeof(kif1.kf_un.kf_sock))) > return (0); > return (3); > case KF_TYPE_PIPE: > if (0 == memcmp(&kif1.kf_un.kf_pipe, &kif2.kf_un.kf_pipe, > sizeof(kif1.kf_un.kf_pipe))) > return (0); > return (3); > //case KF_TYPE_FIFO: > case KF_TYPE_KQUEUE: > if (0 == memcmp(&kif1.kf_un.kf_kqueue, > &kif2.kf_un.kf_kqueue, > sizeof(kif1.kf_un.kf_kqueue))) > return (0); > return (3); > //case KF_TYPE_MQUEUE: > //case KF_TYPE_SHM: > case KF_TYPE_SEM: > if (0 == memcmp(&kif1.kf_un.kf_sem, &kif2.kf_un.kf_sem, > sizeof(kif1.kf_un.kf_sem))) > return (0); > return (3); > case KF_TYPE_PTS: > if (0 == memcmp(&kif1.kf_un.kf_pts, &kif2.kf_un.kf_pts, > sizeof(kif1.kf_un.kf_pts))) > return (0); > return (3); > case KF_TYPE_PROCDESC: > if (0 == memcmp(&kif1.kf_un.kf_proc, &kif2.kf_un.kf_proc, > sizeof(kif1.kf_un.kf_proc))) > return (0); > return (3); > //case KF_TYPE_DEV: > case KF_TYPE_EVENTFD: > if (0 == memcmp(&kif1.kf_un.kf_eventfd, > &kif2.kf_un.kf_eventfd, > sizeof(kif1.kf_un.kf_eventfd))) > return (0); > return (3); > case KF_TYPE_TIMERFD: > if (0 == memcmp(&kif1.kf_un.kf_timerfd, > &kif2.kf_un.kf_timerfd, > sizeof(kif1.kf_un.kf_timerfd))) > return (0); > return (3); > } > /* Otherwise we can't tell */ > return (-1); > } > > > Refs: > 1. https://man7.org/linux/man-pages/man2/kcmp.2.html > > > --000000000000e07473060f50bb6c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi Ivan,=C2=A0

Looks good. Could you please put patch on reviews.freebsd.org?=C2=A0

Thx,=C2=A0
Michael

On Fri, 19 J= an 2024, 14:11 Rozhuk Ivan, <rozh= uk.im@gmail.com> wrote:
Hi!<= br>

graphics/mesa-* uses SYS_kcmp [1] to compare two fds:

int
os_same_file_description(int fd1, int fd2)
{
=C2=A0 =C2=A0pid_t pid =3D getpid();

=C2=A0 =C2=A0/* Same file descriptor trivially implies same file descriptio= n */
=C2=A0 =C2=A0if (fd1 =3D=3D fd2)
=C2=A0 =C2=A0 =C2=A0 return 0;

=C2=A0 =C2=A0return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2);
}

FreeBSD does not implemet this and we got in terminal:
"amdgpu: os_same_file_description couldn't determine if two DRM fd= s reference the same file description."


Mesa say:
/* DRM file descriptors, file descriptions and buffer sharing.
=C2=A0*
=C2=A0* amdgpu_device_initialize first argument is a file descriptor (fd) =C2=A0* representing a specific GPU.
=C2=A0* If a fd is duplicated using os_dupfd_cloexec,
=C2=A0* the file description will remain the same (os_same_file_description= will
=C2=A0* return 0).
=C2=A0* But if the same device is re-opened, the fd and the file descriptio= n will
=C2=A0* be different.
=C2=A0*
=C2=A0* amdgpu_screen_winsys's fd tracks the file description which was=
=C2=A0* given to amdgpu_winsys_create. This is the fd used by the applicati= on
=C2=A0* using the driver and may be used in other ioctl (eg: drmModeAddFB)<= br> =C2=A0*
=C2=A0* amdgpu_winsys's fd is the file description used to initialize t= he
=C2=A0* device handle in libdrm_amdgpu.
=C2=A0*
=C2=A0* The 2 fds can be different, even in systems with a single GPU, eg: = if
=C2=A0* radv is initialized before radeonsi.
=C2=A0*
=C2=A0* This fd tracking is useful for buffer sharing because KMS/GEM handl= es are
=C2=A0* specific to a DRM file description, i.e. the same handle value may = refer
=C2=A0* to different underlying BOs in different DRM file descriptions.
=C2=A0* As an example, if an app wants to use drmModeAddFB it'll need a= KMS handle
=C2=A0* valid for its fd (=3D=3D amdgpu_screen_winsys::fd).
=C2=A0* If both fds are identical, there's nothing to do: bo->u.real= .kms_handle
=C2=A0* can be used directly (see amdgpu_bo_get_handle).
=C2=A0* If they're different, the BO has to be exported from the device= fd as
=C2=A0* a dma-buf, then imported from the app fd as a KMS handle.
=C2=A0*/



I do few checks with dup() and os_dupfd_cloexec() and code show that fd equ= al.

Does this implementation will do that mesa expects?


#include <sys/user.h>
#include <fcntl.h>

int
os_same_file_description(int fd1, int fd2) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 struct kinfo_file kif1, kif2;

=C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Same file descriptor trivially implies same = file description */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (fd1 =3D=3D fd2)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (0);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 kif1.kf_structsize =3D sizeof(kif1);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 kif2.kf_structsize =3D sizeof(kif2);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (-1 =3D=3D fcntl(fd1, F_KINFO, &kif1) ||=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 -1 =3D=3D fcntl(fd2, F_KINFO, &am= p;kif2))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (-1);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 if (kif1.kf_type !=3D kif2.kf_type ||
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 0 !=3D memcmp(&kif1.kf_path, = &kif2.kf_path, sizeof(kif1.kf_path)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);

=C2=A0 =C2=A0 =C2=A0 =C2=A0 switch (kif1.kf_type) {
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_VNODE:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_file, &kif2.kf_un.kf_file,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_file)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_SOCKET:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_sock, &kif2.kf_un.kf_sock,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_sock)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_PIPE:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_pipe, &kif2.kf_un.kf_pipe,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_pipe)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 //case KF_TYPE_FIFO:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_KQUEUE:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_kqueue, &kif2.kf_un.kf_kqueue,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_kqueue)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 //case KF_TYPE_MQUEUE:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 //case KF_TYPE_SHM:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_SEM:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_sem, &kif2.kf_un.kf_sem,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_sem)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_PTS:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_pts, &kif2.kf_un.kf_pts,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_pts)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_PROCDESC:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_proc, &kif2.kf_un.kf_proc,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_proc)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 //case KF_TYPE_DEV:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_EVENTFD:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_eventfd, &kif2.kf_un.kf_eventfd,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_eventfd)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case KF_TYPE_TIMERFD:
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (0 =3D=3D memcmp= (&kif1.kf_un.kf_timerfd, &kif2.kf_un.kf_timerfd,
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sizeo= f(kif1.kf_un.kf_timerfd)))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 return (0);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 return (3);
=C2=A0 =C2=A0 =C2=A0 =C2=A0 }
=C2=A0 =C2=A0 =C2=A0 =C2=A0 /* Otherwise we can't tell */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 return (-1);
}


Refs:
1. https://man7.org/linux/man-pages/man2= /kcmp.2.html


--000000000000e07473060f50bb6c-- From nobody Fri Jan 19 18:40:32 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGpMl1bjPz576ch; Fri, 19 Jan 2024 18:40:35 +0000 (UTC) (envelope-from mjguzik@gmail.com) Received: from mail-oo1-xc30.google.com (mail-oo1-xc30.google.com [IPv6:2607:f8b0:4864:20::c30]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGpMk4BBTz4ggH; Fri, 19 Jan 2024 18:40:34 +0000 (UTC) (envelope-from mjguzik@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-oo1-xc30.google.com with SMTP id 006d021491bc7-5955a4a9b23so623852eaf.1; Fri, 19 Jan 2024 10:40:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1705689633; x=1706294433; darn=freebsd.org; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=uTG3reCpZh3CO3F+kLnQjfwofNc9g256sOEYi5UpQYQ=; b=ktwK15y5fi/lghsclVBNgBOr2NaMpK6fQuDhAAudJ5LwTV1vN8fZOcS1gNOM9Z9gRR lCWpnnQfs8rBuSXYqvX/Ju2QTDPzzORJSGtP/RKOjXMzJjL7zVv3FZkVFjIZvnVJqjuG JKkFkvs1L3UJwSrbTLtOM0dofnnJSSuk9t7/hxQQsW2ECZgq9rJ2MBeeS0CMmf5V9pb9 bOTksW70oIFB3rD3zYCYyrVn1/TKyzCOKX+TxpRsNwrQ4pfYA0DK7hmj53q/p2Yv8+s/ a2XHBKjg8xrWlpM7lZWhmEEJu0TYtRCgKEiKDxxZkZOAbAYLFkqAnBCPlXy/p4OPX296 GlnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705689633; x=1706294433; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=uTG3reCpZh3CO3F+kLnQjfwofNc9g256sOEYi5UpQYQ=; b=hlxwTr61Z6EX8ZW05C7aE27SVCeRBp/YkFz6lIVv7fUfskKgJtViQ9kYcmHoBRwCjR rPpA/32QrrJN+ir7nCKJYJVO6HwQOBZiTH5/GoU0hVNZblQojjMBfmWAjKht8e3qh0TR CRuZ/fLXzxzKNYVFVf70xpxjMJYJMx5OQzZMWBtBn/dup1dRsbeeDo7tSD2akKS8EfsR lqer/aMN+4HyrCu4OPn1lb4vs1hwTRrqEt5vxJ0tnl5uviXe8Fa248E+/6ZRi86GaQun 4z+At8ttmUxRTGGbpCxsYWSww1dPDQY+rKajvOl9fESPwQO8tcdb/3OHX8MhgBFms7Rx Yleg== X-Gm-Message-State: AOJu0YyHNT3fnmjSMYnPB1n7R3HwCF2LkBUi7NxFo4Bm66HvAhl/dfrb DUxVvxb5/EqYGS3P+PXTmCmHmXrUDQ+sJwYXB6hSOX05A2hkNpTGD2wgoo6JqNlqyiFjPZBw61p 1vayCp0MYCY3H/H2aLXlISRdCK4M= X-Google-Smtp-Source: AGHT+IHxoxTS2q62/LAXnuTz7TywckD8vpPkCSBgJ6bAV+NKDKkkSasgdYQmEvJVs3TxR1D2JkjXvzPofn/jBqYSm90= X-Received: by 2002:a4a:a7c9:0:b0:591:b9ce:4f8f with SMTP id n9-20020a4aa7c9000000b00591b9ce4f8fmr120257oom.19.1705689633458; Fri, 19 Jan 2024 10:40:33 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Received: by 2002:a8a:e8b:0:b0:512:723e:b179 with HTTP; Fri, 19 Jan 2024 10:40:32 -0800 (PST) In-Reply-To: References: <20240119131047.6975f574@rimwks.local> From: Mateusz Guzik Date: Fri, 19 Jan 2024 19:40:32 +0100 Message-ID: Subject: Re: kcmp implementation for mesa To: Michael Zhilin Cc: Rozhuk Ivan , FreeBSD Hackers , FreeBSD Mailing List Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 4TGpMk4BBTz4ggH X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] instead of messing with code like this it's probably time to implement kcmp in the kernel On 1/19/24, Michael Zhilin wrote: > Hi Ivan, > > Looks good. Could you please put patch on reviews.freebsd.org? > > Thx, > Michael > > On Fri, 19 Jan 2024, 14:11 Rozhuk Ivan, wrote: > >> Hi! >> >> >> graphics/mesa-* uses SYS_kcmp [1] to compare two fds: >> >> int >> os_same_file_description(int fd1, int fd2) >> { >> pid_t pid = getpid(); >> >> /* Same file descriptor trivially implies same file description */ >> if (fd1 == fd2) >> return 0; >> >> return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2); >> } >> >> FreeBSD does not implemet this and we got in terminal: >> "amdgpu: os_same_file_description couldn't determine if two DRM fds >> reference the same file description." >> >> >> Mesa say: >> /* DRM file descriptors, file descriptions and buffer sharing. >> * >> * amdgpu_device_initialize first argument is a file descriptor (fd) >> * representing a specific GPU. >> * If a fd is duplicated using os_dupfd_cloexec, >> * the file description will remain the same (os_same_file_description >> will >> * return 0). >> * But if the same device is re-opened, the fd and the file description >> will >> * be different. >> * >> * amdgpu_screen_winsys's fd tracks the file description which was >> * given to amdgpu_winsys_create. This is the fd used by the application >> * using the driver and may be used in other ioctl (eg: drmModeAddFB) >> * >> * amdgpu_winsys's fd is the file description used to initialize the >> * device handle in libdrm_amdgpu. >> * >> * The 2 fds can be different, even in systems with a single GPU, eg: if >> * radv is initialized before radeonsi. >> * >> * This fd tracking is useful for buffer sharing because KMS/GEM handles >> are >> * specific to a DRM file description, i.e. the same handle value may >> refer >> * to different underlying BOs in different DRM file descriptions. >> * As an example, if an app wants to use drmModeAddFB it'll need a KMS >> handle >> * valid for its fd (== amdgpu_screen_winsys::fd). >> * If both fds are identical, there's nothing to do: >> bo->u.real.kms_handle >> * can be used directly (see amdgpu_bo_get_handle). >> * If they're different, the BO has to be exported from the device fd as >> * a dma-buf, then imported from the app fd as a KMS handle. >> */ >> >> >> >> I do few checks with dup() and os_dupfd_cloexec() and code show that fd >> equal. >> >> Does this implementation will do that mesa expects? >> >> >> #include >> #include >> >> int >> os_same_file_description(int fd1, int fd2) { >> struct kinfo_file kif1, kif2; >> >> /* Same file descriptor trivially implies same file description >> */ >> if (fd1 == fd2) >> return (0); >> >> kif1.kf_structsize = sizeof(kif1); >> kif2.kf_structsize = sizeof(kif2); >> if (-1 == fcntl(fd1, F_KINFO, &kif1) || >> -1 == fcntl(fd2, F_KINFO, &kif2)) >> return (-1); >> >> if (kif1.kf_type != kif2.kf_type || >> 0 != memcmp(&kif1.kf_path, &kif2.kf_path, >> sizeof(kif1.kf_path))) >> return (3); >> >> switch (kif1.kf_type) { >> case KF_TYPE_VNODE: >> if (0 == memcmp(&kif1.kf_un.kf_file, &kif2.kf_un.kf_file, >> sizeof(kif1.kf_un.kf_file))) >> return (0); >> return (3); >> case KF_TYPE_SOCKET: >> if (0 == memcmp(&kif1.kf_un.kf_sock, &kif2.kf_un.kf_sock, >> sizeof(kif1.kf_un.kf_sock))) >> return (0); >> return (3); >> case KF_TYPE_PIPE: >> if (0 == memcmp(&kif1.kf_un.kf_pipe, &kif2.kf_un.kf_pipe, >> sizeof(kif1.kf_un.kf_pipe))) >> return (0); >> return (3); >> //case KF_TYPE_FIFO: >> case KF_TYPE_KQUEUE: >> if (0 == memcmp(&kif1.kf_un.kf_kqueue, >> &kif2.kf_un.kf_kqueue, >> sizeof(kif1.kf_un.kf_kqueue))) >> return (0); >> return (3); >> //case KF_TYPE_MQUEUE: >> //case KF_TYPE_SHM: >> case KF_TYPE_SEM: >> if (0 == memcmp(&kif1.kf_un.kf_sem, &kif2.kf_un.kf_sem, >> sizeof(kif1.kf_un.kf_sem))) >> return (0); >> return (3); >> case KF_TYPE_PTS: >> if (0 == memcmp(&kif1.kf_un.kf_pts, &kif2.kf_un.kf_pts, >> sizeof(kif1.kf_un.kf_pts))) >> return (0); >> return (3); >> case KF_TYPE_PROCDESC: >> if (0 == memcmp(&kif1.kf_un.kf_proc, &kif2.kf_un.kf_proc, >> sizeof(kif1.kf_un.kf_proc))) >> return (0); >> return (3); >> //case KF_TYPE_DEV: >> case KF_TYPE_EVENTFD: >> if (0 == memcmp(&kif1.kf_un.kf_eventfd, >> &kif2.kf_un.kf_eventfd, >> sizeof(kif1.kf_un.kf_eventfd))) >> return (0); >> return (3); >> case KF_TYPE_TIMERFD: >> if (0 == memcmp(&kif1.kf_un.kf_timerfd, >> &kif2.kf_un.kf_timerfd, >> sizeof(kif1.kf_un.kf_timerfd))) >> return (0); >> return (3); >> } >> /* Otherwise we can't tell */ >> return (-1); >> } >> >> >> Refs: >> 1. https://man7.org/linux/man-pages/man2/kcmp.2.html >> >> >> > -- Mateusz Guzik From nobody Fri Jan 19 18:50:04 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGpZm1MlZz577sH; Fri, 19 Jan 2024 18:50:08 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2610:1c1:1:6074::16:84]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "freefall.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGpZm0PXYz4k29; Fri, 19 Jan 2024 18:50:08 +0000 (UTC) (envelope-from jbeich@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705690208; h=from:from: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; bh=PitFQA4Ya5NUnyjmdawNPu/5CTlayFApkwH/6MZgmNQ=; b=B3g9Q7ZdZrkNEnsBQx2UXKW5R19Gs126XEkvtLleBrlin2HpJtu+CR4Nn9O7Ob895n4JVb sI28Z1jMxXOaJiFnNujZnblFxT/xGtm4VtNY1gygpwXwCExmZ1PSe5V+LtGIrMEonntWsw Qs20Axa1vHwbFFfRCBxzdO8Dg9h9Rw6LEinOh34DAM5vLlpquXF5N2Zc60FxGmJpirvXMQ z1Dn6hAtUZm2OF1CwlEWtA7NhCzt3oa4o9/iDtDO4tOZYg6kKA8B2aSIHct3/MhtXNyboR Wblky3nF8XrgFwuOp77fTse0v1dAhZd3J1dYsWOjWjIc22zmoXWpkzTxt2fXYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705690208; h=from:from: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; bh=PitFQA4Ya5NUnyjmdawNPu/5CTlayFApkwH/6MZgmNQ=; b=c3vQ9n97I0MPC6ct2kzrxmXT+PkgFupCf3cgataXmjW/U6+0IqCsyq/xc87IVNUtTQ/eKy 1mNQkLJkjAds+x9BhMmrbXfcf3rvsp9/5PKIDzwKRFFrjf0pQkk2mMF/yPXIy/tDkUOoOS DZTp/o9oXAfouQ4zEm6YXB9913CZFYJvGutIjM7KNQv2xkLbBPDm34mk4B7oLjfvUZFxxN AsK0OXe9LbRJz0nZ1wxmK3BSabp4MqrwiCLG8wf7XXaK/0a9otEADZ9ppRXH4h2XXsfSQr xhafrmHg2glyekjcM3TY+O+U0ophAt9AOYhBWROZGkln2ekcNz5S9R7U9v2ZuA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705690208; a=rsa-sha256; cv=none; b=ZTjns/XUSySkaSrBCtcpa56sQA7T8vf8mHsC9FivjBbEPQrxWnCkRbCMUGC/67TE5mGcWF SFiNmzeJAaeoRWCiH7g+0167/IMQvLw0LEVoKQJjwMF6c2EgqG8VTQHtMHPGVGa0SRY40c CsdWInPIsLRvndnt77dfIe+x8FnHQIG3LRgMp+ocS35KGt6l04RBQEgpQtBWtG9M+55tF/ 5vSMg4mVSQ6WoJRmSdfxEOIw17wlij5aJ/+qunCWJcwHnN2TTzwqW559JtoUy++r9FBIj7 Qbtj8tvDIqBOcg6ZdArHIkNal7pUpJqv+benDQVKhqTLu+29Oncq84dg8uRZlg== Received: by freefall.freebsd.org (Postfix, from userid 1354) id F3981F809; Fri, 19 Jan 2024 18:50:07 +0000 (UTC) From: Jan Beich To: Rozhuk Ivan Cc: FreeBSD Hackers , FreeBSD Mailing List Subject: Re: kcmp implementation for mesa In-Reply-To: <20240119131047.6975f574@rimwks.local> (Rozhuk Ivan's message of "Fri, 19 Jan 2024 13:10:47 +0200") References: <20240119131047.6975f574@rimwks.local> Date: Fri, 19 Jan 2024 19:50:04 +0100 Message-ID: <5xzp-noo3-wny@FreeBSD.org> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain Rozhuk Ivan writes: > Hi! > > > graphics/mesa-* uses SYS_kcmp [1] to compare two fds: > > int > os_same_file_description(int fd1, int fd2) > { > pid_t pid = getpid(); > > /* Same file descriptor trivially implies same file description */ > if (fd1 == fd2) > return 0; > > return syscall(SYS_kcmp, pid, pid, KCMP_FILE, fd1, fd2); > } > > FreeBSD does not implemet this and we got in terminal: > "amdgpu: os_same_file_description couldn't determine if two DRM fds reference the same file description." See https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6881 It's already applied in graphics/mesa-devel. From nobody Fri Jan 19 19:24:46 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGqLp2CnWz57CZ9; Fri, 19 Jan 2024 19:24:50 +0000 (UTC) (envelope-from jbeich@freebsd.org) Received: from freefall.freebsd.org (freefall.freebsd.org [96.47.72.132]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "freefall.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGqLp1jzHz4psZ; Fri, 19 Jan 2024 19:24:50 +0000 (UTC) (envelope-from jbeich@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705692290; h=from:from: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; bh=7juZdns7Df0zVtrAYvrRUAAMVpffyd/YNlOrlaTBwBU=; b=j4lggMzgWAxkcFHOggrtHuPidClXqETFa5lj1aVSpLkb6MniyVVhB6vSgTSQfg75vGPyrn jSfa8JbhDfe4fKs70jkiImO4I364BbqwvoDkMOP2ELb9m0DhcWuRfEDk5ATmNVMbK9Cx1Y dlroUZs7dTWiTgcx31nMxGGYiaKumMwn3OmYkOSdqtXPLLGGcjcUbZc1etnCDEWAui41Gu reS6UkcCTgumGQ00KG2iZCDr1Ib3AaQdXr8dr4tarM7nOBqtzjpteIXx36SSj77zgoAuMC HU7psmZWl2v6Zn7YHJY002dHAJcbYqTFYvHNol1CXaZIuyltkFKEDn5uk0wDow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705692290; h=from:from: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; bh=7juZdns7Df0zVtrAYvrRUAAMVpffyd/YNlOrlaTBwBU=; b=kXrjD41Uw6Cv/vz6/4gZVMd7NiiNUr+lsB1kJX3K/NWwd1466+P9AhbWSyZvN6l85rTqI7 om1GAzt4pnWMf8cQz65+hUJXaDGkIb/jskBLzGQJE20gN71RkROXuYf1BHX3pxJzbJHqfX nh9KfKPA4Ixzd5R2Gxbq72IdQXuPSCdV+/KgzWw3LTwiSO9UFc9d3o758v/Sytzt45iOdZ k7lHtHvWG209IDUZd/MfiBHW4XO3EbUM4nSOG1CDS+lifO8C04n0TEdW+TH2jWFplw1nmn MNCqp3wizxJC3qncAtWxDC+keV1b3U5u0Cq8+2rtPNmrhix5pwswe4P9Z/SmEg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705692290; a=rsa-sha256; cv=none; b=bUQLRLFAAkOnC2q3ItOsKInwGCFZy1zBib/nAqtbSrE9b9y/az00PElbi7zoSQkouVVj7C I9U1I4mlsn2eNs40GLR0hcf7d+TQZ1CjuSioQjgQs999CbA/C0YjCvTIBNyumZFJ4YR8Gx oUKXeNoKdjPFh0TTLXW4xTuyJEHFbV2R6jGv8aIkNbgP363hmFT9JgaRgQ0mDb+D+GfUk/ O6yfUTDQwa0jFhQgGhv9apXZRZUKQBzeOrjBvg4qAlaTkygNIb3FHq8jv878Jovsg7y/DM RvMG9Biq47bfpQBnekPxvS2jQN9BNjbGCCql6fqmyk95yce2p56gPIhPRTDcGw== Received: by freefall.freebsd.org (Postfix, from userid 1354) id 2DBF1F850; Fri, 19 Jan 2024 19:24:50 +0000 (UTC) From: Jan Beich To: Rozhuk Ivan Cc: FreeBSD Hackers , FreeBSD Mailing List Subject: Re: kcmp implementation for mesa In-Reply-To: <20240119131047.6975f574@rimwks.local> (Rozhuk Ivan's message of "Fri, 19 Jan 2024 13:10:47 +0200") References: <20240119131047.6975f574@rimwks.local> Date: Fri, 19 Jan 2024 20:24:46 +0100 Message-ID: List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain Rozhuk Ivan writes: > * The 2 fds can be different, even in systems with a single GPU, eg: if > * radv is initialized before radeonsi. > * > * This fd tracking is useful for buffer sharing because KMS/GEM handles are > * specific to a DRM file description, i.e. the same handle value may refer > * to different underlying BOs in different DRM file descriptions. > * As an example, if an app wants to use drmModeAddFB it'll need a KMS handle > * valid for its fd (== amdgpu_screen_winsys::fd). > * If both fds are identical, there's nothing to do: bo->u.real.kms_handle > * can be used directly (see amdgpu_bo_get_handle). > * If they're different, the BO has to be exported from the device fd as > * a dma-buf, then imported from the app fd as a KMS handle. Just FYI, some types of export/import dma-bufs may not work on FreeBSD due to https://github.com/freebsd/drm-kmod/issues/278 export/import ioctls are mainly used in Vulkan WSI while kcmp() is used in OpenGL drivers (iris, radeonsi, etc), so it's probobably only necessary between a Vulkan-based compositor (wlroots for Wayland, chamfer for X11) and an OpenGL client (web browsers, old or open source games, etc). How much of that requires emulating kcmp() is unclear to me. From nobody Fri Jan 19 22:24:16 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TGvKz6GhMz57XmX; Fri, 19 Jan 2024 22:24:23 +0000 (UTC) (envelope-from kib@freebsd.org) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TGvKz3sShz4DvR; Fri, 19 Jan 2024 22:24:23 +0000 (UTC) (envelope-from kib@freebsd.org) Authentication-Results: mx1.freebsd.org; none Received: from tom.home (kib@localhost [127.0.0.1] (may be forged)) by kib.kiev.ua (8.17.1/8.17.1) with ESMTP id 40JMOGv7048998; Sat, 20 Jan 2024 00:24:19 +0200 (EET) (envelope-from kib@freebsd.org) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 40JMOGv7048998 Received: (from kostik@localhost) by tom.home (8.17.1/8.17.1/Submit) id 40JMOGdJ048997; Sat, 20 Jan 2024 00:24:16 +0200 (EET) (envelope-from kib@freebsd.org) X-Authentication-Warning: tom.home: kostik set sender to kib@freebsd.org using -f Date: Sat, 20 Jan 2024 00:24:16 +0200 From: Konstantin Belousov To: Mateusz Guzik Cc: Michael Zhilin , Rozhuk Ivan , FreeBSD Hackers , FreeBSD Mailing List Subject: Re: kcmp implementation for mesa Message-ID: References: <20240119131047.6975f574@rimwks.local> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-2.9 required=5.0 tests=ALL_TRUSTED,BAYES_00 autolearn=ham autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on tom.home X-Rspamd-Queue-Id: 4TGvKz3sShz4DvR X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US] On Fri, Jan 19, 2024 at 07:40:32PM +0100, Mateusz Guzik wrote: > instead of messing with code like this it's probably time to implement > kcmp in the kernel Indeed https://reviews.freebsd.org/D43518 From nobody Sat Jan 20 16:51:25 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THMvb1lSVz57VSs for ; Sat, 20 Jan 2024 16:51:39 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-qv1-f52.google.com (mail-qv1-f52.google.com [209.85.219.52]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THMvZ47QNz4H5n; Sat, 20 Jan 2024 16:51:38 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=freebsd.org (policy=none); spf=pass (mx1.freebsd.org: domain of asomers@gmail.com designates 209.85.219.52 as permitted sender) smtp.mailfrom=asomers@gmail.com Received: by mail-qv1-f52.google.com with SMTP id 6a1803df08f44-6818d263cb3so13991406d6.2; Sat, 20 Jan 2024 08:51:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705769497; x=1706374297; h=cc:to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=0vowuSEZd90vmTnHUTd+NVtuOFdobl8+6m+i42S6Ks4=; b=bVcqyTMB7ZszSSxm6fw7X4IyASdkXYgGIOdmMQT/qpEu5XupiB72bGse9hdXiA/zG9 bewvI//P8gJ/83vEpuGFXU9RYqUykGoIAMJ116NlN+l75jLC5wXvqQnn7rOmHQYn3rcq g8ein7vEdvjcoS91kCHS0qYFid9emTe1qPUTUn1Y0xOjJB0PImowYcxlHNDAwlsGQVn6 XdLiuHMsgmRJmKUjUkE2jbDHyESO24JNrNyFPYjQ2Q7pv6gb692M6GiY2jQe+GLtupyH anmWoo+B908LoqOJ2xjUfP0kGgZg8Ffof6jt7uKhqR0JnOULOnRUD2eah/P2cPPWi0cZ 59IQ== X-Gm-Message-State: AOJu0YyZ3I2SmCordjRu2TZFid+Q7F9csFgle0UIMWkafzIMCuImFdF6 WVaby69Us5wUqHe1QVou9Izu5jCKWqmc/3La8UBIRnLxqqHH4ByqKAwBeEHxzx4G0kJaYh6UyfB wsHUF0z4MaIFM55P08zOgyegarb5NE70kUBM= X-Google-Smtp-Source: AGHT+IH2MDekB8BxgUpgBLmKhv3hLqTWtuN6Qcb1uSQ9F02yuTCd4XnFDMBrJOB5h0rI4J4CGqNAbzdYDL91DgT+rTg= X-Received: by 2002:a05:6214:2423:b0:685:2a3d:75d with SMTP id gy3-20020a056214242300b006852a3d075dmr2573758qvb.33.1705769496731; Sat, 20 Jan 2024 08:51:36 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 From: Alan Somers Date: Sat, 20 Jan 2024 09:51:25 -0700 Message-ID: Subject: The Case for Rust (in the base system) To: FreeBSD Hackers Cc: Warner Losh , Scott Long , meka@tilda.center Content-Type: text/plain; charset="UTF-8" X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.81 / 15.00]; NEURAL_HAM_MEDIUM(-0.99)[-0.994]; NEURAL_HAM_LONG(-0.98)[-0.982]; NEURAL_HAM_SHORT(-0.94)[-0.938]; FORGED_SENDER(0.30)[asomers@freebsd.org,asomers@gmail.com]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17]; MIME_GOOD(-0.10)[text/plain]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), No valid DKIM,none]; MIME_TRACE(0.00)[0:+]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; FREEFALL_USER(0.00)[asomers]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.219.52:from]; RCVD_IN_DNSWL_NONE(0.00)[209.85.219.52:from]; R_DKIM_NA(0.00)[]; FROM_NEQ_ENVFROM(0.00)[asomers@freebsd.org,asomers@gmail.com]; FROM_HAS_DN(0.00)[]; MISSING_XM_UA(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; ARC_NA(0.00)[]; RCVD_TLS_LAST(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; RCPT_COUNT_THREE(0.00)[4] X-Rspamd-Queue-Id: 4THMvZ47QNz4H5n In a recent thread on src-committers, we discussed the costs and benefits of including Rust code in the FreeBSD base system. To summarize, the cost is that it would double our build times. imp suggested adding an additional step after buildworld for stuff that requires an external toolchain. That would ease the build time pain. The benefit is that some tools would become easier to write, or even become possible. Here is a list of actual and potential Rust projects that could benefit from being in-tree. If anybody else has items to add, I suggest moving this into the project wiki: Stuff that could only be written in Rust if it were in base =========================================================== * ctl-exporter (I started this, but discovered that the CTL stats API is unstable, so it can't live in ports. Instead, I had to do it in C). https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a86401469181a67ec34 * fusefs tests. Absolutely impossible to do in C. I considered Rust, but went with C++ so they could live in base. They are too closely coupled to fusefs(5) to live out-of-tree. https://github.com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs * devd. Currently C++, but imp suggested a rewrite. https://github.com/freebsd/freebsd-src/tree/main/sbin/devd * zfsd. Currently C++, but I've long pondered a rewrite. Using Rust would make it more testable. https://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd * nscd. Currently C, but confusing and with no test coverage. I've contemplated a rewrite myself, but I don't want to do it in C. https://github.com/freebsd/freebsd-src/tree/main/usr.sbin/nscd * The userland portion of the 802.11ac and Lightning stacks. scottl suggested that these were good candidates for Rust. * freebsd-kpi-r14-0 . https://crates.io/crates/freebsd-kpi-r14-0 Stuff that can live in ports, but would be nicer in base ======================================================== * gstat-rs https://crates.io/crates/gstat * geom-exporter (I've started this, but haven't published it) * nfs-exporter https://crates.io/crates/freebsd-nfs-exporter * virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But if the connection to bhyve(8) is too intimate, it might be hard to do in ports. https://gitlab.com/virtio-fs/virtiofsd * jail-exporter https://crates.io/crates/jail_exporter * Various jail managers have been attempted in Rust. I think these are fine in ports, but others like Goran Mekic have opined that they should be moved to base instead. * musikid's pjdfstest rewrite. I think it would be great to start using this to test the base system's file systems. If the tests themselves lived in base, they would be easier to sync with file system development. https://github.com/musikid/pjdfstest * pf-rs. I suspect that the API isn't very stable. https://crates.io/crates/pf-rs * benchpmc. The pmc counter names changes between releases. https://crates.io/crates/benchpmc FreeBSD-related applications that are just fine in ports ========================================================= * fsx-rs. Unlike pjdfstest, this only tests datapath APIs. Those are usually more stable than control path APIs, so I think there's little to be gained by moving this into base. https://crates.io/crates/fsx * ztop. It uses ZFS's kstats sysctl interface, which is pretty stable. https://crates.io/crates/ztop * iocage-provision https://crates.io/crates/iocage-provision * rsblk https://crates.io/crates/rsblk * xfuse https://github.com/KhaledEmaraDev/xfuse Other FreeBSD-related libraries in Rust ======================================= Just see the list at https://crates.io/keywords/freebsd From nobody Sat Jan 20 17:13:54 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THNQ726mZz57Y58 for ; Sat, 20 Jan 2024 17:14:39 +0000 (UTC) (envelope-from 6yearold@gmail.com) Received: from mail-qk1-f178.google.com (mail-qk1-f178.google.com [209.85.222.178]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THNQ707qmz4KN3; Sat, 20 Jan 2024 17:14:39 +0000 (UTC) (envelope-from 6yearold@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-qk1-f178.google.com with SMTP id af79cd13be357-78333ad3a17so146655785a.3; Sat, 20 Jan 2024 09:14:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705770878; x=1706375678; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3U1BH6ZBIWYdhyRBaN2lDk/6zFEIxPJu2/OSzINY4X0=; b=XRwaEFVebEct/cYvKO4Dw8/gF1vCisDnYa6w1nO1kDP2cUwFo4ZuUIpt0DKiAlnpG6 uSoUmrdwxtwaOLfxwWAhtwEcvHZoqIBVydjTRMg7OaPfJ4dALp9Al4UWHRr0Y0FWb1PN dNwCN/iiq4vM/Dfa4YQepzhKXYocSrht82G/UrZ/qlFac6mXFwQ9CQ7JSmMdaj9fALuv RD0OrdUfQ1qL2cL3VO1TGLK8xCO6mLlVSJz+tP7FHNqbo3U/3uil18SPWb9lxRy6PefS sf+yGvU1nciQLVr0hVqs6Zfo9Kd2/ch/g5CFbIn0ZLROFarogNbhyHmamPowL8soKr8K MkAg== X-Gm-Message-State: AOJu0YzqmjUrrog6Xk3nX9IyqBiq4mQlP5RZWJpCTi7bhXrI1wenb2VA VBvMVLNHR2IhlqPZ4e2TglybkfDuhgvt6u95xFK15Cwx3QrrjxLFYg1q5I6EGxkinA== X-Google-Smtp-Source: AGHT+IFjBYkT7vHscn8mdPxBvdnKW3s7F1HkbaqRiWywPp+DYjPpysdr0DN4fRMqxai8CEiyNJi+vw== X-Received: by 2002:a05:620a:3953:b0:783:8e33:dd26 with SMTP id qs19-20020a05620a395300b007838e33dd26mr2181453qkn.142.1705770877975; Sat, 20 Jan 2024 09:14:37 -0800 (PST) Received: from mail-qv1-f43.google.com (mail-qv1-f43.google.com. [209.85.219.43]) by smtp.gmail.com with ESMTPSA id ca9-20020a05622a1f0900b00429b97f01dcsm831216qtb.9.2024.01.20.09.14.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jan 2024 09:14:37 -0800 (PST) Received: by mail-qv1-f43.google.com with SMTP id 6a1803df08f44-68543244259so5018136d6.1; Sat, 20 Jan 2024 09:14:37 -0800 (PST) X-Received: by 2002:ad4:5cae:0:b0:681:9bf:2c9d with SMTP id q14-20020ad45cae000000b0068109bf2c9dmr2302037qvh.110.1705770877595; Sat, 20 Jan 2024 09:14:37 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Gleb Popov Date: Sat, 20 Jan 2024 20:13:54 +0300 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: The Case for Rust (in the base system) To: Alan Somers Cc: FreeBSD Hackers , Warner Losh , Scott Long , meka@tilda.center Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4THNQ707qmz4KN3 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Sat, Jan 20, 2024 at 7:51=E2=80=AFPM Alan Somers w= rote: > To > summarize, the cost is that it would double our build times. Would it? From what I remember, a lot of rust's build time comes from building its own LLVM. Can we reuse our base LLVM for Rust-in-base? From nobody Sat Jan 20 17:34:45 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THNsM64kyz56Ltl for ; Sat, 20 Jan 2024 17:34:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THNsM5ZXXz4Mg1; Sat, 20 Jan 2024 17:34:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705772087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=w8IuyhuyWqcsPnW8JkllAqCLgMei8wh4Qtb/yO8DtQI=; b=ZYyp5uEGZqVqOQO0ru6TB4gAiHt5+anD6gYoKBUFPN7Sql32NnNIMzF2xsC29rmddPlhHj EHgeVwCzCr3OG+BvRPhndszS7oIINBzlTsconnwjqrTc1DxJrjV3yItEX8E98NRTzEa9Rl gg1vIEJ5YskC8goTKs+amynXBBXq8ZHZOyBtOJlLa17DARs0WYI4T+Tq1k41ibWfAx/0uR 7K9p4ixmUx/cqJM9npPsT9s3AWflxfV5Ucxm4LDfiW23fNRZfZXjSNNkEpCB6GXBmg5W5F cda9vxtIMJWKbEZE5EY7ZDLJrI/WlXBflsbw6FbeMrHLlIFT6M4v877HSrlw0Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705772087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=w8IuyhuyWqcsPnW8JkllAqCLgMei8wh4Qtb/yO8DtQI=; b=v1Wft4bHXCUzubYBBlOtjYcFutHVNgtJKmgrM4l4bKDHeyND5j4OJuJ/o8qhWNBXRoANzS dlAC7h2jLHhV1xIBZ6MugtvATKbFkp0JI2W++P1wvdcjNbkpQSjOcwZGooL3u46KW5+2ba zPoaBM/4MHXYZ6+bsJNxZi9duuNmJ0I3KDnQkjCiKLTJLOZCMSh7dFnsNduG5tA5WiD0y4 B1JnEuYqt3w+kvcAU3/UYoUTw6ynxgABxWA0QvJt1wvCuCCi8BCVz7IRP490CjQBQ5YYhL 3IdDJIKi1TKWmbxmE94vBIfNzdqH1BVKM6KCh4lXbNsPXLxyUWtWjWJvOYsjPA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705772087; a=rsa-sha256; cv=none; b=dHBXYacBnNdy72cRn/89K0HM1ngsuMhWbYY/z0fxmk9vHWjg1KFjvPNy7vcpHTlfP8PEqw vvJV26IPKNOVESWXXa7Q2HB0tTkOvXRcqnU7p+mvgK7rwykTFARSGsj1W2I/p6D0VR5IzQ yQ7t7nCaQvRLsV+flW4MUANhWh+2WEVOeGcA2+C9Oed75MdO75mvxamrfdCzj2SRcEkXNX tp00GgRihifVbs7V+llQ1jVUygdapUtwIXtwUxZ7QI4k9afUdZ6jlZXuEr+3LIZcaX0thH QahHWBP4NCj6GpdSWjXWPrug58cbqjQchbX5E4rN4kGloBu+3W7yPVMEa7PipQ== Received: from tensor.andric.com (tensor.andric.com [87.251.56.140]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "tensor.andric.com", Issuer "R3" (verified OK)) (Authenticated sender: dim) by smtp.freebsd.org (Postfix) with ESMTPSA id 4THNsM3vrZzjh0; Sat, 20 Jan 2024 17:34:47 +0000 (UTC) (envelope-from dim@FreeBSD.org) Received: from smtpclient.apple (longrow.home.andric.com [192.168.0.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by tensor.andric.com (Postfix) with ESMTPSA id 6A5A91D50A; Sat, 20 Jan 2024 18:34:45 +0100 (CET) Content-Type: text/plain; charset=utf-8 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3731.700.6\)) Subject: Re: The Case for Rust (in the base system) From: Dimitry Andric In-Reply-To: Date: Sat, 20 Jan 2024 18:34:45 +0100 Cc: Alan Somers , FreeBSD Hackers , Warner Losh , Scott Long , meka@tilda.center Content-Transfer-Encoding: quoted-printable Message-Id: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> References: To: Gleb Popov X-Mailer: Apple Mail (2.3731.700.6) On 20 Jan 2024, at 18:13, Gleb Popov wrote: >=20 > On Sat, Jan 20, 2024 at 7:51=E2=80=AFPM Alan Somers = wrote: >> To >> summarize, the cost is that it would double our build times. >=20 > Would it? =46rom what I remember, a lot of rust's build time comes = from > building its own LLVM. Can we reuse our base LLVM for Rust-in-base? It used to be the case that the Rust port could not use an LLVM port, but had to use its own copy, but it seems that as of https://cgit.freebsd.org/ports/commit/?id=3D098de5bc2195 it is possible again. However, I think this discussion is going in the wrong direction: why keep attempting to build all these huge toolchain components in our base system at all? Our bmake is reasonably powerful, but upstream build systems for both LLVM and Rust require lots of dependencies that we can never all import. And mimicking those upstream builds in our base system is getting more and more complicated all the time. Therefore, I think it is better to put more effort in supporting external toolchain components, and even going so far as to remove some of those toolchains from base. Including LLVM, at some point. Let new toolchain components for base live in ports, please. -Dimitry From nobody Sat Jan 20 17:54:18 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THPJB68GWz56NdM for ; Sat, 20 Jan 2024 17:54:34 +0000 (UTC) (envelope-from antranigv@freebsd.am) Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THPJB5bhsz4QWK; Sat, 20 Jan 2024 17:54:34 +0000 (UTC) (envelope-from antranigv@freebsd.am) Authentication-Results: mx1.freebsd.org; none Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 3EB935C00BD; Sat, 20 Jan 2024 12:54:34 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Sat, 20 Jan 2024 12:54:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.am; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1705773274; x=1705859674; bh=q2OI8LQeW9ataLmdcWAMybTj2M2Sw5U5Q4ZMTM9uNuc=; b= 1j1YAy2hMCYAqsG4HJPkg7PNlrPs9VHT2ocEYmZn3MrYumOr7FB60d5tii8lXeZ1 KN/nPedIoAPJZgBfR0Ss3G/I7xuJnr1ujupNCamHxzoDgZjRWRz0M103oZmqVvY9 Kj+k8Co1sse1r7oxf3LksAJBzpqVh/4nUh7ReXh6XBekyKPa8llDZj6tbBB/FGde 4awMq3e0Hue9AtXyBlFBwF9jKZm7bLsObdoAZR9wKvqBWK72tBIM4MHR2fJ5praU nl+AGIdr+vr1+KR21/wNwkKvPi4SUisohKJfwrSc2UOdLb5cf4C/eT2/sYmtVq0h 3oKneZQDnHJFKgo7LbIDRg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1705773274; x= 1705859674; bh=q2OI8LQeW9ataLmdcWAMybTj2M2Sw5U5Q4ZMTM9uNuc=; b=E 0RpSzGPqCxhLNvrj5duK3iM6DqBC3X14wI7YLaBcyXL+poeWBlDXucifSMnVGRCz 33WGIxMAZ4sjywAPFkseCUUnXqO/Get8GEapsLnFGSulF9LhCUchnd14RUAHTrPN VxRnglSMw9Z3ZJ7zDZEdNrtxE5Afb3cgdXM9+dBhT1oYHoeE6G9vGjSmJW3okfCh KCcM11Ga1mUq7J9KSu1zsYRLrZ+UTClF2igOuWKNIQ5ZkuHBEsg/lqfUKOCbsc8D YZZneI8NimsFU3ZiiBfiZBPwwHwIJQH9Bgv2Ez0p0cMbaBIMH0GV1hVOWsn9e0aa v2zTkwF1A6DF0Si9wW++g== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdekvddguddtjecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmd enucfjughrpegtggfuhfgjffevgffkfhfvofesthhqmhdthhdtjeenucfhrhhomheptehn thhrrghnihhgucggrghrthgrnhhirghnuceorghnthhrrghnihhgvhesfhhrvggvsghsug drrghmqeenucggtffrrghtthgvrhhnpefgudffteelleetheejffekfffftefhleehgefh uedtgfdthedvudetieejfeekgfenucffohhmrghinhepghhithhhuhgsrdgtohhmpdgrnh htrhgrnhhighhvrdgrmhdptghrrghtvghsrdhiohdpghhithhlrggsrdgtohhmnecuvehl uhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheprghnthhrrghnih hgvhesfhhrvggvsghsugdrrghm X-ME-Proxy: Feedback-ID: ibc494664:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat, 20 Jan 2024 12:54:31 -0500 (EST) Content-Type: text/plain; charset=utf-8 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.200.91.1.1\)) Subject: Re: The Case for Rust (in the base system) From: Antranig Vartanian In-Reply-To: Date: Sat, 20 Jan 2024 21:54:18 +0400 Cc: FreeBSD Hackers , Warner Losh , Scott Long , =?utf-8?Q?Goran_Meki=C4=87?= Content-Transfer-Encoding: quoted-printable Message-Id: References: To: Alan Somers X-Mailer: Apple Mail (2.3774.200.91.1.1) X-Rspamd-Queue-Id: 4THPJB5bhsz4QWK X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US] I don=E2=80=99t want to do a what-aboutism, but if all we=E2=80=99re = looking for is a good and=20 secure system programming language, the alternatives are nicer. There=E2=80=99s Modula-3, which, unlike Rust, supported FreeBSD as Tier = 1, I=E2=80=99m sure the=20 compiler is smaller, although hasn=E2=80=99t been updated in a while. On that thought, Wirth=E2=80=99s passing reminded me of Oberon-2, which = does have a=20 port on FreeBSD, lang/voc. It can also =E2=80=9Cattach=E2=80=9D to the C = functions. Last year I=20 integrated libxo, libucl and libjail with Oberon-2/VOC and it all worked = fine. The compile times are also impressive.[1][2] However, if all we=E2=80=99re looking for is to be fancy and follow the = industry, Rust=20 doesn=E2=80=99t seem bad overall. The main issue is the toolchain. 2x = compile time=20 would be awful. Optional targets would be nice, but then people will = start=20 writing X/Y/Z in Rust, and before you know jail(8) would start requiring = a=20 large external compiler. Again, to be clear, I would like to hear the =E2=80=9Cwhy=E2=80=9D more = than the =E2=80=9Chow=E2=80=9D. 1: https://github.com/antranigv/voclibucl 2: https://github.com/antranigv/voclibxo=20 Cheers, =E2=80=94 Antranig Vartanian https://antranigv.am/ PGP Key ID: 0x2D59F21C > On 20 Jan 2024, at 8:51=E2=80=AFPM, Alan Somers = wrote: >=20 > In a recent thread on src-committers, we discussed the costs and > benefits of including Rust code in the FreeBSD base system. To > summarize, the cost is that it would double our build times. imp > suggested adding an additional step after buildworld for stuff that > requires an external toolchain. That would ease the build time pain. > The benefit is that some tools would become easier to write, or even > become possible. Here is a list of actual and potential Rust projects > that could benefit from being in-tree. If anybody else has items to > add, I suggest moving this into the project wiki: >=20 > Stuff that could only be written in Rust if it were in base > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >=20 > * ctl-exporter (I started this, but discovered that the CTL stats API = is > unstable, so it can't live in ports. Instead, I had to do it in C). > = https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a864014= 69181a67ec34 >=20 > * fusefs tests. Absolutely impossible to do in C. I considered Rust, = but went > with C++ so they could live in base. They are too closely coupled to > fusefs(5) to live out-of-tree. > https://github.com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs >=20 > * devd. Currently C++, but imp suggested a rewrite. > https://github.com/freebsd/freebsd-src/tree/main/sbin/devd >=20 > * zfsd. Currently C++, but I've long pondered a rewrite. Using Rust = would > make it more testable. > https://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd >=20 > * nscd. Currently C, but confusing and with no test coverage. I've > contemplated a rewrite myself, but I don't want to do it in C. > https://github.com/freebsd/freebsd-src/tree/main/usr.sbin/nscd >=20 > * The userland portion of the 802.11ac and Lightning stacks. scottl = suggested > that these were good candidates for Rust. >=20 > * freebsd-kpi-r14-0 . https://crates.io/crates/freebsd-kpi-r14-0 >=20 > Stuff that can live in ports, but would be nicer in base > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D >=20 > * gstat-rs https://crates.io/crates/gstat >=20 > * geom-exporter (I've started this, but haven't published it) >=20 > * nfs-exporter https://crates.io/crates/freebsd-nfs-exporter >=20 > * virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But if = the > connection to bhyve(8) is too intimate, it might be hard to do in = ports. > https://gitlab.com/virtio-fs/virtiofsd >=20 > * jail-exporter https://crates.io/crates/jail_exporter >=20 > * Various jail managers have been attempted in Rust. I think these = are fine in > ports, but others like Goran Mekic have opined that they should be = moved to > base instead. >=20 > * musikid's pjdfstest rewrite. I think it would be great to start = using this > to test the base system's file systems. If the tests themselves = lived in > base, they would be easier to sync with file system development. > https://github.com/musikid/pjdfstest >=20 > * pf-rs. I suspect that the API isn't very stable. > https://crates.io/crates/pf-rs >=20 > * benchpmc. The pmc counter names changes between releases. > https://crates.io/crates/benchpmc >=20 > FreeBSD-related applications that are just fine in ports > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D >=20 > * fsx-rs. Unlike pjdfstest, this only tests datapath APIs. Those are = usually > more stable than control path APIs, so I think there's little to be = gained by > moving this into base. https://crates.io/crates/fsx >=20 > * ztop. It uses ZFS's kstats sysctl interface, which is pretty = stable. > https://crates.io/crates/ztop >=20 > * iocage-provision https://crates.io/crates/iocage-provision >=20 > * rsblk https://crates.io/crates/rsblk >=20 > * xfuse https://github.com/KhaledEmaraDev/xfuse >=20 > Other FreeBSD-related libraries in Rust > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Just see the list at https://crates.io/keywords/freebsd >=20 From nobody Sat Jan 20 17:58:25 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THPNy0wKcz56PF2 for ; Sat, 20 Jan 2024 17:58:42 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [74.104.188.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "m5p.com", Issuer "R3" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THPNy0PKzz4RkD; Sat, 20 Jan 2024 17:58:41 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Authentication-Results: mx1.freebsd.org; none Received: from [IPV6:2001:470:1f07:15ff::26] (court.m5p.com [IPv6:2001:470:1f07:15ff:0:0:0:26]) (authenticated bits=0) by mailhost.m5p.com (8.17.1/8.15.2) with ESMTPSA id 40KHwP4P051002 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sat, 20 Jan 2024 12:58:31 -0500 (EST) (envelope-from george+freebsd@m5p.com) Message-ID: <80529ee4-acc3-456c-8aa9-7fd7ebbf0803@m5p.com> Date: Sat, 20 Jan 2024 12:58:25 -0500 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Case for Rust (in the base system) To: Dimitry Andric , Gleb Popov Cc: Alan Somers , FreeBSD Hackers , Warner Losh , Scott Long , meka@tilda.center References: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> Content-Language: en-US From: George Mitchell Autocrypt: addr=george+freebsd@m5p.com; keydata= xjMEZaHDbxYJKwYBBAHaRw8BAQdA2W6oBfS8haXY0/Ft4zS1OTLYfC8EBIADPTgMQdh85C3N KEdlb3JnZSBNaXRjaGVsbCA8Z2VvcmdlK2ZyZWVic2RAbTVwLmNvbT7CmQQTFgoAQRYhBDpv v9n4+UzMLAJ8EZocD3futmd9BQJlocSiAhsDBQkFo5qABQsJCAcCAiICBhUKCQgLAgQWAgMB Ah4HAheAAAoJEJocD3futmd9SxwBAJUi6DNdVhWCZBTv5XGy1g0JgApLWe/3S0M0zz9sn7/L AQCcJcV5k5s2rt9J5C1AUm6XVsuneVvIWXO5j1GKWk0NC844BGWhw28SCisGAQQBl1UBBQEB B0AaFz/6B95RRvjOdLZr5fSdhuIHvwr24H3ePDZSw6wlUwMBCAfCfgQYFgoAJhYhBDpvv9n4 +UzMLAJ8EZocD3futmd9BQJlocNvAhsMBQkFo5qAAAoJEJocD3futmd9RXsBANwRD9RE56F6 /jeZOrujHICLcgPiOt50Y6866v9OUTjUAP9GlC1aopfBpNwuPLJBam7oBaGqvY98VDhzOjoT 7DNbCQ== In-Reply-To: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------Ch0swtdKculoVm88JYWdy8be" X-Spam-Status: No, score=0.2 required=10.0 tests=HELO_MISC_IP,HELO_NO_DOMAIN autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on mattapan.m5p.com X-Rspamd-Queue-Id: 4THPNy0PKzz4RkD X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_FROM(0.00)[freebsd]; ASN(0.00)[asn:701, ipnet:74.104.0.0/16, country:US] This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------Ch0swtdKculoVm88JYWdy8be Content-Type: multipart/mixed; boundary="------------dP23aos3kf5q0gyW5nud8tzl"; protected-headers="v1" From: George Mitchell To: Dimitry Andric , Gleb Popov Cc: Alan Somers , FreeBSD Hackers , Warner Losh , Scott Long , meka@tilda.center Message-ID: <80529ee4-acc3-456c-8aa9-7fd7ebbf0803@m5p.com> Subject: Re: The Case for Rust (in the base system) References: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> In-Reply-To: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> --------------dP23aos3kf5q0gyW5nud8tzl Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 T24gMS8yMC8yNCAxMjozNCwgRGltaXRyeSBBbmRyaWMgd3JvdGU6DQo+IFsuLi5dDQo+IEhv d2V2ZXIsIEkgdGhpbmsgdGhpcyBkaXNjdXNzaW9uIGlzIGdvaW5nIGluIHRoZSB3cm9uZyBk aXJlY3Rpb246IHdoeQ0KPiBrZWVwIGF0dGVtcHRpbmcgdG8gYnVpbGQgYWxsIHRoZXNlIGh1 Z2UgdG9vbGNoYWluIGNvbXBvbmVudHMgaW4gb3VyIGJhc2UNCj4gc3lzdGVtIGF0IGFsbD8g Wy4uLl0NCg0KKzEuDQpJIHNwZWFrIGZyb20gaWdub3JhbmNlIG9uIHRoZSBjb3N0L2JlbmVm aXQgcmF0aW8gb2YgcnVzdC4gIFNvIHBlcmhhcHMNCnNvbWVvbmUgY2FuIHRlbGwgdXM6IHdo YXQgaXMgdGhlIHNpemUgb2YgdGhlIHJ1c3QgcnVudGltZSBsaWJyYXJ5KGllcyk/DQpEbyB3 ZSBjb250aW51ZSB0byB3YW50IEZyZWVCU0QgdG8gc3VwcG9ydCBzbWFsbCBzeXN0ZW1zPyAg U2hvdWxkIHdlDQpwb25kZXIgZGl2aWRpbmcgdGhlIGJhc2Ugc3lzdGVtIGludG8gdGhlIGxp Z2h0d2VpZ2h0IHBhcnQgYW5kIHRoZQ0KaGVhdmllciB3ZWlnaHQgcGFydD8gIEhvbmVzdGx5 LCBJIGFtIG5vdCB0cnlpbmcgdG8gc293IGRpc3NlbnNpb24sIGJ1dA0KSSBkbyBzdWdnZXN0 IGEgc2VyaW91cyBkaXNjdXNzaW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEdl b3JnZQ0K --------------dP23aos3kf5q0gyW5nud8tzl-- --------------Ch0swtdKculoVm88JYWdy8be Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQQ6b7/Z+PlMzCwCfBGaHA937rZnfQUCZawJwQUDAAAAAAAKCRCaHA937rZnfTJM AP9nPB4CeozLWmzU2VemHAw1ezPMux1xg4GmPwzhct1lAAEAiNqDDZl3nuAUEvl0NmpRuInbGh3X d9rabMc4QmLytAM= =l8dh -----END PGP SIGNATURE----- --------------Ch0swtdKculoVm88JYWdy8be-- From nobody Sat Jan 20 18:08:27 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THPcT58s4z56QRj for ; Sat, 20 Jan 2024 18:08:41 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [IPv6:2a00:1450:4864:20::331]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THPcT1Bddz4ThV for ; Sat, 20 Jan 2024 18:08:41 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-40e80046264so23166755e9.0 for ; Sat, 20 Jan 2024 10:08:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705774120; x=1706378920; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=kAIWzrvtKsJt/SNorL3O0TbA8EWQWCRGRHj77URyRa8=; b=LW8AIutgevqD0UUHu0+ov5mMgEVOt+TQSvT+5I/GVziNH3rBc6SRGW5MqQTTj+VYzd /78yK+InUynq9SHJExH1sAevyQP/K9u0omAZBGYEP1/n05sEyf7myF+Bbyzh2VKvRNMo Ksf06PpsReiGuCDWfazaHtsoXklFZ5JaUf08tg+r4kUzKtgehUKzZdFTu8fSiVhGlejp kk3KIGHBe9poRZY5Lbq9/2Ql2cZI1Jgms1uXqtRnjT0no0hjM8hiPsf4Xqd0b7CIqrqE iU5Drix/gzUz5UVC76Dps8WBANpqDvKBZDGCAQxjN2EbBSDHekSgLwTkwQHnQiJEOyf7 CG5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705774120; x=1706378920; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kAIWzrvtKsJt/SNorL3O0TbA8EWQWCRGRHj77URyRa8=; b=DdacChofNFo1zpTrHdQxe2u1bVl81CvLDQLmzDNc4LEkdFzYGBnhZG/149nYy50LpG vuc1AM7JvBkh7JIBBCkFwAjpo+L/navVh63EzbjDoG8Gi0PXbaLJvsuYQJKBF6MwqveK WSSG5U4NFvZxk5R/9FHNQ76JTMlOSi6/c821iWk1A4p1UGvZ7LE74Y2s13448csIikli Yiw+CzR2m5QwHVI9W0L1yQ2L+Ra9Kb6qLHk+t3EuSZTplbCXX4oaH1SCsmsSLWgNYXt3 N/mv6jnwVYw6yuzYP7fPZZPIq0wqEaCisgCEAaxzr+YZf8eqr1l/3eUcavklXHxSOQfz B4hA== X-Gm-Message-State: AOJu0YxiTu1uOWmvqsNZlAnqKd7fVR2Ai7vq75faQqM6p8LDh4LwwWpN 2C+R0Tags7vY0kMwb7r/xVWCjeJXVbXrDgvQdHnQaHy5MXyXxR9Nv78LG2v88NYEHo94Kz2xmpF AWgLZ8cxbo9j1QWtJE+kGln/bfpNdK2NpCL7GZayXlUFKqMx8 X-Google-Smtp-Source: AGHT+IEpi30ij3SGReinqWRKVUidHcCE+BQJrdOHSFQwIoRAGDLoebJ845biRn3gaJymsmsBGYrNxFRRKCFdkh95sD0= X-Received: by 2002:a05:600c:4486:b0:40e:49c6:bb97 with SMTP id e6-20020a05600c448600b0040e49c6bb97mr1035085wmo.160.1705774119301; Sat, 20 Jan 2024 10:08:39 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Warner Losh Date: Sat, 20 Jan 2024 11:08:27 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Gleb Popov Cc: Alan Somers , FreeBSD Hackers , Scott Long , "Goran Meki??" Content-Type: multipart/alternative; boundary="00000000000072c8d7060f647c5f" X-Rspamd-Queue-Id: 4THPcT1Bddz4ThV X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --00000000000072c8d7060f647c5f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 20, 2024, 10:14=E2=80=AFAM Gleb Popov wrot= e: > On Sat, Jan 20, 2024 at 7:51=E2=80=AFPM Alan Somers = wrote: > > To > > summarize, the cost is that it would double our build times. > > Would it? From what I remember, a lot of rust's build time comes from > building its own LLVM. Can we reuse our base LLVM for Rust-in-base? > No. That's not possible in general. Rust needs its own special thing that is not well tested fit the non rust case. Warner > --00000000000072c8d7060f647c5f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sat, Jan 20, 2024, 10:14=E2=80=AFAM Gleb Popov <= arrowd@freebsd.org> wrote:
=
On Sat, Jan 20, 2024 at 7:51=E2=80=AFP= M Alan Somers <asomers@freebsd.org> wrote:
> To
> summarize, the cost is that it would double our build times.

Would it? From what I remember, a lot of rust's build time comes from building its own LLVM. Can we reuse our base LLVM for Rust-in-base?

No. That= 's not possible in general.=C2=A0 Rust needs its own special thing that= is not well tested fit the non rust case.

Warner=C2=A0
--00000000000072c8d7060f647c5f-- From nobody Sat Jan 20 18:25:24 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THPzp5z4pz56SMx for ; Sat, 20 Jan 2024 18:25:26 +0000 (UTC) (envelope-from vishwin@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THPzp5TJrz4YSp; Sat, 20 Jan 2024 18:25:26 +0000 (UTC) (envelope-from vishwin@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705775126; h=from:from: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:autocrypt:autocrypt; bh=a3tz5u7Inr1AdsORa4Gt92HEU36VggtWu1d+eAIZJ+k=; b=PSGTK8b+y39k8rXNeeFuQ9FUDmmFtDc2Y/WGc1FdAE3FlE417sjIW+N7PL/doKPZ6kiK9I sAUXirLbyUqjf4KWiWSEBymMTC1XDhx8lUPPsh8/MUxqlwk2++uJccwVkmlR/bfTjIurBa ULqgkJjf6NtsjgQ8gKCLbsJtjVcnJ6johIPZUxR1/PJG0gEmqEmcRoyMJqQJi1Vnrgt/36 F/kA3RdGZhYgwGCCR2bSMugvxF4fCAEH5S8Rt6wDVOdKs0iFOZe4Wjt/aT8Olpzx2UfGil c7vIsxBJTB/FClIyALncrPGclZaSDwuqUs5rff4kZnU2TX8uDI7pBevYW80WTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705775126; h=from:from: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:autocrypt:autocrypt; bh=a3tz5u7Inr1AdsORa4Gt92HEU36VggtWu1d+eAIZJ+k=; b=TKT8m3TkEmjJ6tw/h1IX/VCh8/oUjjcZjRqpnQMZ8yqNGrTCagqObxVbAdEBAt1B+0nJZl r35R2A9tVU9TB1dDZAsWm/jMbic2SdguKsWOvZICqRKB1d86Xx/XKo/Y5wM/yy2NveMMKN 0rE2N44t42zSzERnf8mUx5gAmKqrmWDUXf4rZXc1aTzBtg9DY67kH3XCUBGPW/O2mKMQjJ kYdC/1O/QXiL5HNocQkCMjWc/LBCYr1RJxJWSOlaArPdXyBveK/ue7/UTleFIC65oZSRr0 zvflADTr0sVzGx7smtFwvF0o5m0KbqNBFQBPhd1YkIgGE7tab995lGN6HjATKQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705775126; a=rsa-sha256; cv=none; b=sPVlqm7fgHcpdwPfXuOtQT2zCuTW7pcmooYVstf717u6j2hoQMZ3ORWc9j2OghCdddPlof TSmRVh3TJU7kkKMsXnJR1SLA4oA2mfsKExKWHgLHvrHXtEBIz9dwoAtOMvGja+iR8EESQg RWGgCLp0JI7I+QJCIb8gdTbJ7tQyKVig8l7UabrUgheTxMrAffmasiiLrwpxGCHzSPMl+I 5yGS9qWE6Oh/9sKodfxExy1BAxLiMho+GESUz1bpJOVg/wL3aCL2Jd++Gmvw+/QVN7FkB8 RXns4EmlosJdSO9Rg1lMZam0374StNc3Gw7R0BWkRi6dRvaaeJ1CNwa5avDzqQ== Received: from [IPV6:2601:98a:d80:d0:56ee:75ff:fe50:69b5] (unknown [IPv6:2601:98a:d80:d0:56ee:75ff:fe50:69b5]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: vishwin/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4THPzp2R9Xz10hp; Sat, 20 Jan 2024 18:25:26 +0000 (UTC) (envelope-from vishwin@freebsd.org) Message-ID: Date: Sat, 20 Jan 2024 13:25:24 -0500 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Case for Rust (in the base system) Content-Language: en-GB To: Warner Losh , Gleb Popov Cc: Alan Somers , FreeBSD Hackers , Scott Long , Goran Meki?? References: From: Charlie Li Autocrypt: addr=vishwin@freebsd.org; keydata= xjMEZFWWqBYJKwYBBAHaRw8BAQdAINFDmM+bgGkT1C4nD5a3BxgcH8Xnx5qTJbPuIBxD57LN MkNoYXJsaWUgTGkgKEZyZWVCU0QgUHJvamVjdCkgPHZpc2h3aW5ARnJlZUJTRC5vcmc+wpkE ExYKAEEWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZFWWqAIbAwUJA+3ogAULCQgHAgIiAgYV CgkICwIEFgIDAQIeBwIXgAAKCRBnj5NgWEFcyllaAP9CGICFEvTUOv5BYh/H8m49VJ87a/wd 0obeQfVBnS464AD9FopTHbjEs0HDV0ZYmJPxzJIznjumsj9gBxX0bBqqTgzOOARkVZaoEgor BgEEAZdVAQUBAQdA6BUWuG5RuT0vmtoDyCUUqiJGdtd78GM5ic3kw2AntSADAQgHwn4EGBYK ACYWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZFWWqAIbDAUJA+3ogAAKCRBnj5NgWEFcyn55 AP9ezKDCUgHqAq6JX976abb9pYdbSjxxNJqnrjgNkfhgIQD/QhR+fgnUHhcGTMBy+pYHZUGH 5DCuITsK1U4+v252uws= Organization: FreeBSD Project In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------7swh005jstD03yUbYdt7iKUL" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------7swh005jstD03yUbYdt7iKUL Content-Type: multipart/mixed; boundary="------------noDCi19SFqHPU5Kme0IDm0tP"; protected-headers="v1" From: Charlie Li To: Warner Losh , Gleb Popov Cc: Alan Somers , FreeBSD Hackers , Scott Long , Goran Meki?? Message-ID: Subject: Re: The Case for Rust (in the base system) References: In-Reply-To: --------------noDCi19SFqHPU5Kme0IDm0tP Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 V2FybmVyIExvc2ggd3JvdGU6DQo+IA0KPiANCj4gT24gU2F0LCBKYW4gMjAsIDIwMjQsIDEw OjE04oCvQU0gR2xlYiBQb3BvdiB3cm90ZToNCj4gDQo+ICAgICBPbiBTYXQsIEphbiAyMCwg MjAyNCBhdCA3OjUx4oCvUE0gQWxhbiBTb21lcnMgd3JvdGU6DQo+ICAgICAgPiBUbw0KPiAg ICAgID4gc3VtbWFyaXplLCB0aGUgY29zdCBpcyB0aGF0IGl0IHdvdWxkIGRvdWJsZSBvdXIg YnVpbGQgdGltZXMuDQo+IA0KPiAgICAgV291bGQgaXQ/IEZyb20gd2hhdCBJIHJlbWVtYmVy LCBhIGxvdCBvZiBydXN0J3MgYnVpbGQgdGltZSBjb21lcyBmcm9tDQo+ICAgICBidWlsZGlu ZyBpdHMgb3duIExMVk0uIENhbiB3ZSByZXVzZSBvdXIgYmFzZSBMTFZNIGZvciBSdXN0LWlu LWJhc2U/DQo+IA0KPiANCj4gTm8uIFRoYXQncyBub3QgcG9zc2libGUgaW4gZ2VuZXJhbC7C oCBSdXN0IG5lZWRzIGl0cyBvd24gc3BlY2lhbCB0aGluZyANCj4gdGhhdCBpcyBub3Qgd2Vs bCB0ZXN0ZWQgZml0IHRoZSBub24gcnVzdCBjYXNlLg0KPiANClJ1c3QgaGFzIGZvbGxvd2Vk IHZhbmlsbGEgTExWTSBzaW5jZSA4LjAgYW5kIHRoZXkgaGF2ZSBzdXBwb3J0ZWQgdGhlIA0K ZXh0ZXJuYWwgTExWTSBwYXRoIHNpbmNlIHRoZW4uIEhvd2V2ZXIsIHRoZXkgdXNlIHRoZSBz aGFyZWQgbGlicmFyeSwgTElUIA0KYW5kIGEgZmV3IG90aGVyIGV4dHJhcywgYWxsIG9mIHdo aWNoIHdlIGRvbid0IGJ1aWxkIG9yIGluY2x1ZGUgaW4gYmFzZS4gDQpUaGV5IGFsc28gaGF2 ZSBuYXJyb3cgTExWTSB2ZXJzaW9uIHN1cHBvcnQgd2luZG93cywgd2l0aCBvbmx5IExMVk0g MTUgDQphbmQgbGF0ZXIgc3VwcG9ydGVkIG9uIFJ1c3QgMS43NCBhbmQgbGF0ZXIuIEZ1cnRo ZXIsIHJlbGVhc2UgY3ljbGVzIGFyZSANCmFib3V0IGV2ZXJ5IG1vbnRoLCB3aGljaCBtYXli ZSB1bmxlc3Mgd2Ugc3RpY2sgc3RyaWN0bHkgdG8gRWRpdGlvbnMgDQoobGFuZ3VhZ2Ugc3Rh bmRhcmRzIGxpa2UgQzExLCBDKysxNywgZXQgYWwpLCBzb3VuZCBsaWtlIGEgcHJvYmxlbSBm b3IgDQotUkVMRUFTRXMuDQoNCi0tIA0KQ2hhcmxpZSBMaQ0KLi4ubm9wZSwgc3RpbGwgZG9u J3QgaGF2ZSBhbiBleGl0IGxpbmUuDQoNCg== --------------noDCi19SFqHPU5Kme0IDm0tP-- --------------7swh005jstD03yUbYdt7iKUL Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZawQFAUDAAAAAAAKCRBnj5NgWEFcytiY AP4tHPcXbexNGSm16OK4K9pUkUcdqOMSm3v5zM5M4x3lpgD/XrmbJyGDxIwnXu8WQRbOe4qQ/KhI VgcCHrCCHD9lwgE= =o4e5 -----END PGP SIGNATURE----- --------------7swh005jstD03yUbYdt7iKUL-- From nobody Sat Jan 20 18:37:25 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THQFv2Z2bz56Tqg for ; Sat, 20 Jan 2024 18:37:39 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THQFv0Gz1z4Zrt for ; Sat, 20 Jan 2024 18:37:39 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-559cef15db5so5370359a12.0 for ; Sat, 20 Jan 2024 10:37:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705775857; x=1706380657; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=tscIF3/0hzxZtAyvZXHimFNwwTnoJOf9hCB+crhYwkc=; b=sFTgvff4eDvPFugIM5ZLP/el2RiahN1HDJ8bPpIY2y9leAQ6Xf03/rJkPluAHo5SqM 79nVTwIuaFoXl5KR/HjvrV4kd9kxtwkQid6dWI3L+GQMx+54tp06e94TjRiOrrS3fQh5 X8j85mcm95fOut0TZZ6YiB9yRWEAI6dVhkZ2qefxO0XwM4kY0D7GMSnM42+TziziY/Yu D+6OWSICuxK592DzR3s3y7HEYsKas5noD/2PV2fQuZTPbvFT4CPLS5y2KBVTZ4ie2I7q PUjc+TkTVq3vpGGwBJ8UTsWwfYH6GM6G8UmPTGY7i36/FCiCJAG/1hVq9cEr/8n/52I+ PSHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705775857; x=1706380657; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=tscIF3/0hzxZtAyvZXHimFNwwTnoJOf9hCB+crhYwkc=; b=kQiWTRNxP+YngbfjnM6RLQ7P82qyWY6x0ZJS7iUNiJ7ZKJK5W0gpJIrmkbN9BdDhqe gWHvGtyxEQKwnZ4jyIq8RppbV13l4hoD/6UdmBaECcpCRBmz2CNtNtqIdePBjq2EI6Kx lqY7lPGAjWJPZFwDXQOpmDx3eNbOJ/9fXUtYsibeE/YM2b1992RNc7w8Vbe8ryI7fjnd pAmzrQLISatMbZDZaZmXE4WRv5puc1lVuC+MCljvDmRACqvofCD9d/J6Xp7m1KqYwPWU ozFEJ5q758fsZxbh8jW7SO90XsDzMTj2NVBvUK6NcVGRck/yrj+P9STJJF9siOb/2eFd bPkQ== X-Gm-Message-State: AOJu0YzZFOgmh/G1zeFkTN8wYNzwDda3mKXTq4AOVLFoQuGjpc0n87H+ 5xR6fNig/MOYIRzBCA0CrSTP1VoobbSNuGxgZqknY2C1gI23vImKonrNIQ1MwnO/sem0mxUG8+y LfSbiBFKyZ2fMjT6c9MWJifX5u/uuT7Yu88FLeA== X-Google-Smtp-Source: AGHT+IF+4WEQ+DXDfskI1sgglPFHVdR4h5LU/MMW5fK07hiHD/7nyro5Ks6/vdXsQjE3YCsHeYgxBdeVYBmGJP9RsZM= X-Received: by 2002:aa7:c2c6:0:b0:559:f5a7:80f with SMTP id m6-20020aa7c2c6000000b00559f5a7080fmr1742786edp.21.1705775857251; Sat, 20 Jan 2024 10:37:37 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Warner Losh Date: Sat, 20 Jan 2024 11:37:25 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Alan Somers Cc: FreeBSD Hackers , "Goran Meki??" Content-Type: multipart/alternative; boundary="00000000000009d07c060f64e4be" X-Rspamd-Queue-Id: 4THQFv0Gz1z4Zrt X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --00000000000009d07c060f64e4be Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 20, 2024, 9:51=E2=80=AFAM Alan Somers wro= te: > In a recent thread on src-committers, we discussed the costs and > benefits of including Rust code in the FreeBSD base system. To > summarize, the cost is that it would double our build times. imp > suggested adding an additional step after buildworld for stuff that > requires an external toolchain. That would ease the build time pain. > The benefit is that some tools would become easier to write, or even > become possible. Here is a list of actual and potential Rust projects > that could benefit from being in-tree. If anybody else has items to > add, I suggest moving this into the project wiki: > While a good list, it's just a list. Rust is interesting but without experience in the FreeBSD context we won't know if it materially improves things. The why of Rust is currently somewhere between hype and reality. Those that love it, love it. Those that don't, don't see how this fad is different from all the other fads. That's part of why it's hard to sell: the rust toolchain is difficult and different; it can do things automatically with crates that are insecure and unrepeatable; etc. With that, though comes a lot of benefits in safety of the language in more ways than just security. What is needed to convince people it's not just a fad is to bring some things into the tree that aren't critical to the tree, per se, but that can let people opt in to see just how bad the downside is in a buildworld context and just what the upsides are in practice. If it really is a good fit, it will sell itself... So this isn't about what could be rust: a lot can be. But what's the point of rewriting things that haven't had security bugs that rust prevents? The benefits of using rust have to be documented and demonstrated rather than just hyped, asserted and sold. That's why I suggested we start with better tests in rust. That's the petfect way to make sure we get the external tool chain working. We get the integration right. We fight with whatever pain there is and fix it as needed. We learn if it actually fits in and if we can keep up the infrastructure or if that's not something we can do. Once that works, we can rewrite other things as the need or desire arises. So no, we aren't going to rush headlong into fullscale rust replacement of all the things. However I'll note Linux hasn't done that either. They are taking a one step at a time approach. Step one is build integration with an external toolchain, imho. Until we have that, 0 Rust will be in the system. We already can do ports... but if you want it more central the first steps will be in making it possible to build rust binaries at all in a repeatable way. Warner Stuff that could only be written in Rust if it were in base > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > * ctl-exporter (I started this, but discovered that the CTL stats API is > unstable, so it can't live in ports. Instead, I had to do it in C). > > https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a86401= 469181a67ec34 > > * fusefs tests. Absolutely impossible to do in C. I considered Rust, bu= t > went > with C++ so they could live in base. They are too closely coupled to > fusefs(5) to live out-of-tree. > https://github.com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs > > * devd. Currently C++, but imp suggested a rewrite. > https://github.com/freebsd/freebsd-src/tree/main/sbin/devd > > * zfsd. Currently C++, but I've long pondered a rewrite. Using Rust wou= ld > make it more testable. > https://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd > > * nscd. Currently C, but confusing and with no test coverage. I've > contemplated a rewrite myself, but I don't want to do it in C. > https://github.com/freebsd/freebsd-src/tree/main/usr.sbin/nscd > > * The userland portion of the 802.11ac and Lightning stacks. scottl > suggested > that these were good candidates for Rust. > > * freebsd-kpi-r14-0 . https://crates.io/crates/freebsd-kpi-r14-0 > > Stuff that can live in ports, but would be nicer in base > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > > * gstat-rs https://crates.io/crates/gstat > > * geom-exporter (I've started this, but haven't published it) > > * nfs-exporter https://crates.io/crates/freebsd-nfs-exporter > > * virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But if the > connection to bhyve(8) is too intimate, it might be hard to do in ports= . > https://gitlab.com/virtio-fs/virtiofsd > > * jail-exporter https://crates.io/crates/jail_exporter > > * Various jail managers have been attempted in Rust. I think these are > fine in > ports, but others like Goran Mekic have opined that they should be move= d > to > base instead. > > * musikid's pjdfstest rewrite. I think it would be great to start using > this > to test the base system's file systems. If the tests themselves lived = in > base, they would be easier to sync with file system development. > https://github.com/musikid/pjdfstest > > * pf-rs. I suspect that the API isn't very stable. > https://crates.io/crates/pf-rs > > * benchpmc. The pmc counter names changes between releases. > https://crates.io/crates/benchpmc > > FreeBSD-related applications that are just fine in ports > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D > > * fsx-rs. Unlike pjdfstest, this only tests datapath APIs. Those are > usually > more stable than control path APIs, so I think there's little to be > gained by > moving this into base. https://crates.io/crates/fsx > > * ztop. It uses ZFS's kstats sysctl interface, which is pretty stable. > https://crates.io/crates/ztop > > * iocage-provision https://crates.io/crates/iocage-provision > > * rsblk https://crates.io/crates/rsblk > > * xfuse https://github.com/KhaledEmaraDev/xfuse > > Other FreeBSD-related libraries in Rust > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Just see the list at https://crates.io/keywords/freebsd > --00000000000009d07c060f64e4be Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sat, Jan 20, 2024, 9:51=E2=80=AFAM Alan Somers <= asomers@freebsd.org> wrote:
In a recent thread on src-committers= , we discussed the costs and
benefits of including Rust code in the FreeBSD base system.=C2=A0 To
summarize, the cost is that it would double our build times.=C2=A0 imp
suggested adding an additional step after buildworld for stuff that
requires an external toolchain.=C2=A0 That would ease the build time pain.<= br> The benefit is that some tools would become easier to write, or even
become possible.=C2=A0 Here is a list of actual and potential Rust projects=
that could benefit from being in-tree.=C2=A0 If anybody else has items to add, I suggest moving this into the project wiki:

While a good list, it'= s just a list. Rust is interesting but without experience in the FreeBSD co= ntext we won't know if it materially improves things. The why of Rust i= s currently somewhere between hype and reality. Those that love it, love it= . Those that don't, don't see how this fad is different from all th= e other fads. That's part of why it's hard to sell: the rust toolch= ain is difficult and different; it can do things automatically with crates = that are insecure and unrepeatable; etc. With that, though comes a lot of b= enefits in safety of the language in more ways than just security. What is = needed to convince people it's not just a fad is to bring some things i= nto the tree that aren't critical to the tree, per se, but that can let= people opt in to see just how bad the downside is in a buildworld context = and just what the upsides are in practice. If it really is a good fit, it w= ill sell itself...

So th= is isn't about what could be rust: a lot can be. But what's the poi= nt of rewriting things that haven't had security bugs that rust prevent= s? The benefits of using rust have to be documented and demonstrated rather= than just hyped, asserted and sold.

That's why I suggested we start with better tests in rust.= That's the petfect way to make sure we get the external tool chain wor= king. We get the integration right. We fight with whatever pain there is an= d fix it as needed. We learn if it actually fits in and if we can keep up t= he infrastructure or if that's not something we can do.=C2=A0 Once that= works, we can rewrite other things as the need or desire arises.

So no, we aren't going to rus= h headlong into fullscale rust replacement of all the things. However I'= ;ll note Linux hasn't done that either. They are taking a one step at a= time approach. Step one is build integration with an external toolchain, i= mho. Until we have that, 0 Rust will be in the system. We already can do po= rts... but if you want it more central the first steps will be in making it= possible to build rust binaries at all in a repeatable way.

Warner


Stuff that could only be written in Rust if it were in base
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D

* ctl-exporter (I started this, but discovered that the CTL stats API is =C2=A0 unstable, so it can't live in ports.=C2=A0 Instead, I had to do = it in C).
=C2=A0 https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a864= 01469181a67ec34

* fusefs tests.=C2=A0 Absolutely impossible to do in C.=C2=A0 I considered = Rust, but went
=C2=A0 with C++ so they could live in base.=C2=A0 They are too closely coup= led to
=C2=A0 fusefs(5) to live out-of-tree.
=C2=A0 https://github= .com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs

* devd.=C2=A0 Currently C++, but imp suggested a rewrite.
=C2=A0 https://github.com/freeb= sd/freebsd-src/tree/main/sbin/devd

* zfsd.=C2=A0 Currently C++, but I've long pondered a rewrite.=C2=A0 Us= ing Rust would
=C2=A0 make it more testable.
=C2=A0 https://github.= com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd

* nscd.=C2=A0 Currently C, but confusing and with no test coverage.=C2=A0 I= 've
=C2=A0 contemplated a rewrite myself, but I don't want to do it in C. =C2=A0 https://github.com/f= reebsd/freebsd-src/tree/main/usr.sbin/nscd

* The userland portion of the 802.11ac and Lightning stacks.=C2=A0 scottl s= uggested
=C2=A0 that these were good candidates for Rust.

* freebsd-kpi-r14-0 .=C2=A0 https://crates.io/c= rates/freebsd-kpi-r14-0

Stuff that can live in ports, but would be nicer in base
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D

* gstat-rs https://crates.io/crates/gstat

* geom-exporter (I've started this, but haven't published it)

* nfs-exporter https://crates.io/crates/free= bsd-nfs-exporter

* virtiofsd-rs .=C2=A0 Nobody has yet tried to port it to FreeBSD.=C2=A0 Bu= t if the
=C2=A0 connection to bhyve(8) is too intimate, it might be hard to do in po= rts.
=C2=A0 https://gitlab.com/virtio-fs/virtiofsd
* jail-exporter https://crates.io/crates/jail_expor= ter

* Various jail managers have been attempted in Rust.=C2=A0 I think these ar= e fine in
=C2=A0 ports, but others like Goran Mekic have opined that they should be m= oved to
=C2=A0 base instead.

* musikid's pjdfstest rewrite.=C2=A0 I think it would be great to start= using this
=C2=A0 to test the base system's file systems.=C2=A0 If the tests thems= elves lived in
=C2=A0 base, they would be easier to sync with file system development.
=C2=A0 https://github.com/musikid/pjdfstest

* pf-rs.=C2=A0 I suspect that the API isn't very stable.
=C2=A0 https://crates.io/crates/pf-rs

* benchpmc.=C2=A0 The pmc counter names changes between releases.
=C2=A0 https://crates.io/crates/benchpmc

FreeBSD-related applications that are just fine in ports
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D

* fsx-rs.=C2=A0 Unlike pjdfstest, this only tests datapath APIs.=C2=A0 Thos= e are usually
=C2=A0 more stable than control path APIs, so I think there's little to= be gained by
=C2=A0 moving this into base. https://crates.io/crates/fsx

* ztop.=C2=A0 It uses ZFS's kstats sysctl interface, which is pretty st= able.
=C2=A0
https://crates.io/crates/ztop

* iocage-provision=C2=A0 https://crates.io/crate= s/iocage-provision

* rsblk https://crates.io/crates/rsblk

* xfuse=C2=A0 https://github.com/KhaledEmaraDev/xf= use

Other FreeBSD-related libraries in Rust
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Just see the list at https://crates.io/keywords/freebsd=
--00000000000009d07c060f64e4be-- From nobody Sat Jan 20 21:12:34 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THTj11yMqz57WCt for ; Sat, 20 Jan 2024 21:12:53 +0000 (UTC) (envelope-from otis@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THTj11Q4Qz4t60; Sat, 20 Jan 2024 21:12:53 +0000 (UTC) (envelope-from otis@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705785173; h=from:from: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; bh=Zu1iDCRbiiGe1s6qmwJm7m0W2awY1IMkUHB5JfRY6kM=; b=WR39r1Bqrj8KVS4zpTazfWlqqBaL9iTYLTfWZp2eCjcyxPxb8H+Oct5jFaZFREDQy8giJN 6VdcoMsDYsBQnIFUEKmXSaeCijAfBzpkiInkteJdfbCoY8TR6UB7qG73I+GQnpAHA7xWcr QKvc0idl/aFU7uXpBAG0o+5eQc3mtNxtvsAh1AtHI3TaE+iYuaWAGA4HqulJd3u/PqA2Ee WURSYHbRB7XTQF6JBZmSpkrlRkS4/D/4tPtZpl2TGdry6IQyz+gca+N7vXNFcvM+5TGz2c kC94d4uGspL39Qor0+IMYMT0bgFDbZugfpOULuyu9CHivcyQ6ZLoQJ9UqXlRlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705785173; h=from:from: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; bh=Zu1iDCRbiiGe1s6qmwJm7m0W2awY1IMkUHB5JfRY6kM=; b=jkjfnDC2qzvHNe434VZs6svlXsua/V6a6yYzc1AoBjSlxDyteabqCS990oqCOBUZSzsWml bLliu7wla5aaGGkI+bfNVkfobcJP1zynNG4kUAPcOYy/klx9FEb6lHaj0/jrJ6Au3/xdjm B/TR9W9fEv8jmzzFRShk5mMPq9hIK7EQ6ijZ+V4QznZXPRapUxwW3U0Z4wBEg8ndfvNEvv dGrtg5bb+bCUTPFTC8zuvZ2EIS7wwHoUbv9pG//1r5t2127W81lFu6ZBo6vqbuRS5LwH3N yVVMgA8SnF4ykDFInd1UD3XVxwuM2CHAkeY8YRMYVN2lv237D2FAwCG2HuG/jA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705785173; a=rsa-sha256; cv=none; b=h4yo/6GFG9RS/TMmcdGLKALdL2n3kD7a+gSTqP8hPH0hVNXNI6PmjstZy7CiG11sElPB1b X4gT4u5SS4iy3OCZez/WmnZe/mz6o/SBA93yYL/gsFmJ8gOhHC/jJYmbLgyOVAA6SRlezq +3BVNoqUhZou5ePpE/A31sDSnvC8SmbXVEzXQHCPyh/0VU4o8CU3CLG+GW0NddL2bM2E6A jmf601qYe4aTfjugriQjnDAswj5yFFpFUqOvHV5uYx068dI1C9gplRolaw2D8IZYHJBw4p e7pLdWsiMAKGXpj92ng+w//ahhQ100UD6iH/H4c5oiZivrAlqxLXypUkkoJyuQ== Received: from ns2.wilbury.net (ns2.wilbury.net [IPv6:2a01:b200:0:1:f816:3eff:fecd:13e6]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature ECDSA (P-256) client-digest SHA256) (Client CN "svc.wilbury.net", Issuer "R3" (verified OK)) (Authenticated sender: otis) by smtp.freebsd.org (Postfix) with ESMTPSA id 4THTj05ktDz135Z; Sat, 20 Jan 2024 21:12:52 +0000 (UTC) (envelope-from otis@FreeBSD.org) Received: from smtpclient.apple (gw-upc.owhome.net [188.167.168.254]) (Authenticated sender: juraj@lutter.sk) by svc.wilbury.net (Postfix) with ESMTPSA id 4865F62213; Sat, 20 Jan 2024 22:12:45 +0100 (CET) From: Juraj Lutter Message-Id: <58D3A7DA-84D2-4C35-B9EB-5BD4BAA51706@FreeBSD.org> Content-Type: multipart/alternative; boundary="Apple-Mail=_0A83281E-76B6-4777-A91A-A8B83F976DAB" List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3774.300.61.1.2\)) Subject: Re: The Case for Rust (in the base system) Date: Sat, 20 Jan 2024 22:12:34 +0100 In-Reply-To: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> Cc: Gleb Popov , Alan Somers , FreeBSD Hackers , Warner Losh , Scott Long , meka@tilda.center To: Dimitry Andric References: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> X-Mailer: Apple Mail (2.3774.300.61.1.2) --Apple-Mail=_0A83281E-76B6-4777-A91A-A8B83F976DAB Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 > On 20 Jan 2024, at 18:34, Dimitry Andric wrote: >=20 > On 20 Jan 2024, at 18:13, Gleb Popov wrote: >>=20 >> On Sat, Jan 20, 2024 at 7:51=E2=80=AFPM Alan Somers = wrote: >>> To >>> summarize, the cost is that it would double our build times. >>=20 >> Would it? =46rom what I remember, a lot of rust's build time comes = from >> building its own LLVM. Can we reuse our base LLVM for Rust-in-base? >=20 > It used to be the case that the Rust port could not use an LLVM port, > but had to use its own copy, but it seems that as of > https://cgit.freebsd.org/ports/commit/?id=3D098de5bc2195 it is = possible > again. Speaking of this: I=E2=80=99ve now tried to build rust with llvm15 on releng/13.2 and all = I=E2=80=99ve got was: wn-freebsd/release/deps/cargo-daa18b6ffb5dc5da" "-Wl,--gc-sections" = "-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-nodefaultlibs" "-Wl,-z,origin" = "-Wl,-rpath ,$ORIGIN/../lib" =3D note: ld: error: relocation R_X86_64_32 cannot be used against = local symbol; recompile with -fPIC >>> defined in = /wrkdirs/usr/ports/lang/rust/work/_build/x86_64-unknown-freebsd/stage1-too= ls/x86_64-unknown-freebsd/release/deps/liblibssh2_sy s-a60af3093adc87c9.rlib(agent.o) >>> referenced by agent.o:(libssh2_agent_init) in archive = /wrkdirs/usr/ports/lang/rust/work/_build/x86_64-unknown-freebsd/stage1-too= ls/x86_64 -unknown-freebsd/release/deps/liblibssh2_sys-a60af3093adc87c9.rlib Is this something that can be fixed easily? Thanks =E2=80=94 Juraj Lutter otis@FreeBSD.org --Apple-Mail=_0A83281E-76B6-4777-A91A-A8B83F976DAB Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8

On 20 Jan 2024, at 18:34, Dimitry Andric = <dim@FreeBSD.org> wrote:

On 20 Jan 2024, at 18:13, = Gleb Popov <arrowd@freebsd.org> wrote:

On Sat, Jan 20, 2024 at 7:51=E2=80=AFPM Alan Somers = <asomers@freebsd.org> wrote:
To
summarize, the cost is that it would double our = build times.

Would it? =46rom what I remember, a lot = of rust's build time comes from
building its own LLVM. Can we reuse = our base LLVM for Rust-in-base?

It used to be the = case that the Rust port could not use an LLVM port,
but had to use = its own copy, but it seems that as = of
https://cgit.freebsd.org/ports/commit/?id=3D098de5bc2195 it is = possible
again.

Speaking = of this:

I=E2=80=99ve now tried to build rust = with llvm15 on releng/13.2 and all I=E2=80=99ve got = was:

wn-freebsd/release/deps/cargo-daa18b6ff= b5dc5da" "-Wl,--gc-sections" "-pie" "-Wl,-z,relro,-z,now" "-Wl,-O1" = "-nodefaultlibs" "-Wl,-z,origin" = "-Wl,-rpath
,$ORIGIN/../lib"
  =3D note: ld: = error: relocation R_X86_64_32 cannot be used against local symbol; = recompile with -fPIC
          = >>> defined in = /wrkdirs/usr/ports/lang/rust/work/_build/x86_64-unknown-freebsd/stage1-too= ls/x86_64-unknown-freebsd/release/deps/liblibssh2_sy
s-a60af3093= adc87c9.rlib(agent.o)
          = >>> referenced by agent.o:(libssh2_agent_init) in archive = /wrkdirs/usr/ports/lang/rust/work/_build/x86_64-unknown-freebsd/stage1-too= ls/x86_64
-unknown-freebsd/release/deps/liblibssh2_sys-a60af3093= adc87c9.rlib


Is this something = that can be fixed = easily?

Thanks

=E2=80=94
Juraj = Lutter
otis@FreeBSD.org

= --Apple-Mail=_0A83281E-76B6-4777-A91A-A8B83F976DAB-- From nobody Sat Jan 20 22:31:23 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THWRs5jmjz57fH5 for ; Sat, 20 Jan 2024 22:31:37 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52b.google.com (mail-ed1-x52b.google.com [IPv6:2a00:1450:4864:20::52b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THWRr3RRSz53cm for ; Sat, 20 Jan 2024 22:31:36 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=bsdimp-com.20230601.gappssmtp.com header.s=20230601 header.b=g+46lFko; dmarc=none; spf=none (mx1.freebsd.org: domain of wlosh@bsdimp.com has no SPF policy when checking 2a00:1450:4864:20::52b) smtp.mailfrom=wlosh@bsdimp.com Received: by mail-ed1-x52b.google.com with SMTP id 4fb4d7f45d1cf-556c3f0d6c5so2558993a12.2 for ; Sat, 20 Jan 2024 14:31:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705789893; x=1706394693; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fT12rTF04Yv9iC6W45aGYzJ/ZECzsBePXYNdOVw8bfk=; b=g+46lFkofYfGYO2p9YYLRA/lb2ND3gna1ZHOByffc49Ra3oq8SJdBw67COYbX+liiz 0qnaPCCOL0HiA/QsILVO6pXvF0SuvzSr8frZoHeNjX7ng0h18zikeyCGX3d5JqQ0wiRi P7+bOkaWhkrheo6rwOe9rbCiF5AuF+rUGaKuvWmu8a/TuQVVu+VoDFX5e4tDXexIhlMp 7r3GV7hvFnYNbX2I/JVnj6XrHUPhR3vdB3n1JD32zdNBjZQEu/mJbTYm5+PHTppMqG6y RWyYkz5Nq8FBd41prfH30KqDxnZevv1R1srRRlacZhmsnaZLvvkH2ggHLZXxGF9t3jtw ASRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705789893; x=1706394693; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fT12rTF04Yv9iC6W45aGYzJ/ZECzsBePXYNdOVw8bfk=; b=bR5OtpQfef7Y73kRjWJRfNw94WG1Pyx9NgoaxTUgrq7GAMwWoVQodvOul6vMknVmao xx3UH48P2vE95DyljFthREugB4syAMbqVdhLBgHj/zLM4LL2BLwWEkSW2Rrzm4kJqzpi 1qUrJwUnrlTYTtCuKmJ0mqZOaI8G4S4XrjgzDaVIAE/8Uc35uL5IOwRSbpfaeI+o7c7x nI8dmyr8/btpQiz6rbNwC1I1ke83ExpYZ0IqrT98Xq4kdUdayoZR3Nw6a99/Aw2czoab 92I+j5N0RjaW4Zs8a2uJ+QNET+Fy2LFkIEGI5ULfcR/uiLc5qcKTqIu9IUBbWJgCrAAm Iv+Q== X-Gm-Message-State: AOJu0YxgakKl5yjrasR194SaJV6KtCAK5PA5UFTGZr4T3v5lP6KiAOzb EAkxnOMEYVEd1FtEwKUZWPA8vzhnwi8nV6dGjrzqEHGGIGMpt5hw28ES4NF7yhtknpq1YhyXqh7 LEw8AEUmTdftofJ7ZrgbWni6g3mUfJwwf6MouhA== X-Google-Smtp-Source: AGHT+IGpCU1qKZt+/bnhlA1ZO7I3oxVIlOmQjCipEop2fq0D0TCbAT8IiPWmK8HSVym5uqNsN4wKW20zeZ0lKX+mvQE= X-Received: by 2002:a05:6402:2202:b0:559:fbdf:6d79 with SMTP id cq2-20020a056402220200b00559fbdf6d79mr511235edb.114.1705789893083; Sat, 20 Jan 2024 14:31:33 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> In-Reply-To: <1673801705774097@mail.yandex.ru> From: Warner Losh Date: Sat, 20 Jan 2024 15:31:23 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Aleksandr Fedorov Cc: Alan Somers , FreeBSD Hackers , Scott Long , "meka@tilda.center" Content-Type: multipart/alternative; boundary="000000000000a39865060f682804" X-Spamd-Bar: -- X-Spamd-Result: default: False [-3.00 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FORGED_SENDER(0.30)[imp@bsdimp.com,wlosh@bsdimp.com]; R_DKIM_ALLOW(-0.20)[bsdimp-com.20230601.gappssmtp.com:s=20230601]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; TO_DN_EQ_ADDR_SOME(0.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US]; TO_DN_SOME(0.00)[]; DMARC_NA(0.00)[bsdimp.com]; RCVD_COUNT_ONE(0.00)[1]; MISSING_XM_UA(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:~]; RCVD_IN_DNSWL_NONE(0.00)[2a00:1450:4864:20::52b:from]; FREEMAIL_TO(0.00)[yandex.ru]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; R_SPF_NA(0.00)[no SPF record]; FROM_NEQ_ENVFROM(0.00)[imp@bsdimp.com,wlosh@bsdimp.com]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_FIVE(0.00)[5]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_TLS_LAST(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; ARC_NA(0.00)[]; DKIM_TRACE(0.00)[bsdimp-com.20230601.gappssmtp.com:+] X-Rspamd-Queue-Id: 4THWRr3RRSz53cm --000000000000a39865060f682804 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov wrote: > What about external dependencies? > > https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L1= 9 > https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > > Is there any plan for which crates we should take into the base system? > > We have had C++ in base for many years, but I don=E2=80=99t see any good = libraries > for CLI, logging, JSON, etc. > > > https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-to= ols > > Where is the support for Freebsd as a primary platform? ARM, RISC-V, > Power? Should we rewrite devd? > > I think we need to start by providing official repositories (e.g > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > for different languages that include stable bindings to the system API: > - sysctl > - libgeom > - libifconfig > - netgraph > - jail > - etc. > > So that it=E2=80=99s not just some anonymous on crates.io that represents= these > bindings, but our community. > Officially, with support for a stable ABI for releases, security patches, > etc. > > After this, it will be possible to think about which components to includ= e > in the base system. > > I would be glad to see a more modern language than C in the database, but > I=E2=80=99m afraid that it will be like with C++, > that we will get a couple of daemons and utilities and that=E2=80=99s all= . > These are all good questions that need good answers, though necessarily to get started. But the other question that occured to me after my last posting was "What about build integration?" How much of the rust automation do we take in vs how much do we drive from a future bsd.rust.mk. I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely need one for what we traditionally think of as libraries (which may or may not map 1:1 onto crates: we could have c callable libraries written in rust in the future, for example) and one for binaries. Initially, though, if we go with the 'make rust tests possible' then we'd likely need the appropriate packages installed for whatever dependencies we'd have in the tests. This would give us a taste for what we'd need to do for base, I'd think. Once we had that notion, I can easily see there needing to be some sort of rust bindings for ATF/kyua as one of the first libraries / crates that would test that aspect of the build system. That all would be up to the people writing the tests in rust, I'd imagine. While I could jot out the basics of this integration (so one could just add the rust tools to a subdir or subdirs, include the bsd.rust.mk or whatever and then it would build if rust is enabled, and would emit a warning it was skipped because rust was disabled). We'd find out if this is workable or not and iterate from there. But that would also require active participation from the rust advocates to make it a reality: I can put together the build infrastructure for the disabled case, but likely can't on my own do the rust enabled case. I'd be happy to work with someone to do that, but I'm not going to be able to do that myself: my need for rust is slight, my knowledge of rust is weak, etc. Working with someone (or ideally several someones), though it could become reality. So please contact me if you'd like to work on this. Warner > 20.01.2024, 19:51, "Alan Somers" : > > In a recent thread on src-committers, we discussed the costs and > benefits of including Rust code in the FreeBSD base system. To > summarize, the cost is that it would double our build times. imp > suggested adding an additional step after buildworld for stuff that > requires an external toolchain. That would ease the build time pain. > The benefit is that some tools would become easier to write, or even > become possible. Here is a list of actual and potential Rust projects > that could benefit from being in-tree. If anybody else has items to > add, I suggest moving this into the project wiki: > > Stuff that could only be written in Rust if it were in base > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > * ctl-exporter (I started this, but discovered that the CTL stats API is > unstable, so it can't live in ports. Instead, I had to do it in C). > > https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a86401= 469181a67ec34 > > * fusefs tests. Absolutely impossible to do in C. I considered Rust, but > went > with C++ so they could live in base. They are too closely coupled to > fusefs(5) to live out-of-tree. > https://github.com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs > > * devd. Currently C++, but imp suggested a rewrite. > https://github.com/freebsd/freebsd-src/tree/main/sbin/devd > > * zfsd. Currently C++, but I've long pondered a rewrite. Using Rust would > make it more testable. > https://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd > > * nscd. Currently C, but confusing and with no test coverage. I've > contemplated a rewrite myself, but I don't want to do it in C. > https://github.com/freebsd/freebsd-src/tree/main/usr.sbin/nscd > > * The userland portion of the 802.11ac and Lightning stacks. scottl > suggested > that these were good candidates for Rust. > > * freebsd-kpi-r14-0 . https://crates.io/crates/freebsd-kpi-r14-0 > > Stuff that can live in ports, but would be nicer in base > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D > > * gstat-rs https://crates.io/crates/gstat > > * geom-exporter (I've started this, but haven't published it) > > * nfs-exporter https://crates.io/crates/freebsd-nfs-exporter > > * virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But if the > connection to bhyve(8) is too intimate, it might be hard to do in ports= . > https://gitlab.com/virtio-fs/virtiofsd > > * jail-exporter https://crates.io/crates/jail_exporter > > * Various jail managers have been attempted in Rust. I think these are > fine in > ports, but others like Goran Mekic have opined that they should be move= d > to > base instead. > > * musikid's pjdfstest rewrite. I think it would be great to start using > this > to test the base system's file systems. If the tests themselves lived i= n > base, they would be easier to sync with file system development. > https://github.com/musikid/pjdfstest > > * pf-rs. I suspect that the API isn't very stable. > https://crates.io/crates/pf-rs > > * benchpmc. The pmc counter names changes between releases. > https://crates.io/crates/benchpmc > > FreeBSD-related applications that are just fine in ports > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D > > * fsx-rs. Unlike pjdfstest, this only tests datapath APIs. Those are > usually > more stable than control path APIs, so I think there's little to be > gained by > moving this into base. https://crates.io/crates/fsx > > * ztop. It uses ZFS's kstats sysctl interface, which is pretty stable. > https://crates.io/crates/ztop > > * iocage-provision https://crates.io/crates/iocage-provision > > * rsblk https://crates.io/crates/rsblk > > * xfuse https://github.com/KhaledEmaraDev/xfuse > > Other FreeBSD-related libraries in Rust > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > Just see the list at https://crates.io/keywords/freebsd > > --000000000000a39865060f682804 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Sat, Jan 20, 2024 at 11:45=E2=80= =AFAM Aleksandr Fedorov <wignedd= oom@yandex.ru> wrote:
https://gith= ub.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20

Is the= re any plan for which crates we should take into the base system?
=C2=A0
We have had C++ in base for many years, but I don=E2= =80=99t see any good libraries for CLI, logging, JSON, etc.
=C2=A0
=C2=A0
Where is the support for Freebsd as a primary platform? = ARM, RISC-V, Power? Should we rewrite devd?
=C2=A0
I think we need to start by providing official repositories (e.g git.FreeBSD.org/r= ust.git or = git.FreeBSD.org/go.git)
for different languages that include = stable bindings to the system API:
- sysctl
- libgeom
- libifconfig
- netgraph
- jail
- et= c.
=C2=A0
So that it=E2=80=99s not just some anonymous = on crates.io that repres= ents these bindings, but our community.
Officially, with support = for a stable ABI for releases, security patches, etc.
=C2=A0
After this, it will be possible to think about which components to in= clude in the base system.
=C2=A0
I would be glad t= o see a more modern language than C in the database, but I=E2=80=99m afraid= that it will be like with C++,
that we will get a couple of daem= ons and utilities and that=E2=80=99s all.

These are all good questions that need g= ood answers, though necessarily to get started.

Bu= t the other question that occured to me after my last posting was "Wha= t about build integration?"
How much of the rust automation = do we take in vs how much do we drive from a future bsd.rust.mk.
I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely need on= e for what we traditionally
think of as libraries (which may or m= ay not map 1:1 onto crates: we could have c callable libraries
wr= itten in rust in the future, for example) and one for binaries.=C2=A0 Initi= ally, though, if we go with the
'make rust tests possible'= ; then we'd likely need the appropriate packages installed for whatever=
dependencies we'd have in the tests. This would give us a ta= ste for what we'd need to do for
base, I'd think. Once we= had that notion, I can easily see there needing to be some sort of
rust bindings for ATF/kyua as one of the first libraries / crates that w= ould test that aspect of
the build system. That all would be up t= o the people writing the tests in rust, I'd imagine.

=
While I could jot out the basics of this integration (so one cou= ld just add the rust
tools to a subdir or subdirs, include the bsd.rust.mk or whatever and then it would = build
if rust is enabled, and would emit a warning it was skipped= because rust was disabled).
We'd find out if this is workabl= e or not and iterate from there. But that would also require
acti= ve participation from the rust advocates to make it a reality: I can put to= gether the
build infrastructure for the disabled case, but likely= can't on my own do the rust enabled
case. I'd be happy t= o work with someone to do that, but I'm not going to be able to do
that myself: my need for rust is slight, my knowledge of rust is weak= , etc. Working with
someone (or ideally several someones), though= it could become reality. So please contact
me if you'd like = to work on this.

Warner
=C2=A0
20.01.2024, 19:5= 1, "Alan Somers" <asomers@freebsd.org>:

In a recent thread = on src-committers, we discussed the costs and
benefits of including Rust= code in the FreeBSD base system. To
summarize, the cost is that it woul= d double our build times. imp
suggested adding an additional step after = buildworld for stuff that
requires an external toolchain. That would eas= e the build time pain.
The benefit is that some tools would become easie= r to write, or even
become possible. Here is a list of actual and potent= ial Rust projects
that could benefit from being in-tree. If anybody else= has items to
add, I suggest moving this into the project wiki:

S= tuff that could only be written in Rust if it were in base
=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D

* ctl-exporter (I started this, but discovered that = the CTL stats API is
=C2=A0=C2=A0unstable, so it can't live in ports= . Instead, I had to do it in C).
=C2=A0=C2=A0https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f5= 04f6c48a86401469181a67ec34

* fusefs tests. Absolutely impossible= to do in C. I considered Rust, but went
=C2=A0=C2=A0with C++ so they co= uld live in base. They are too closely coupled to
=C2=A0=C2=A0fusefs(5) = to live out-of-tree.
=C2=A0=C2=A0https://github.= com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs

* devd. Cu= rrently C++, but imp suggested a rewrite.
=C2=A0=C2=A0http= s://github.com/freebsd/freebsd-src/tree/main/sbin/devd

* zfsd. C= urrently C++, but I've long pondered a rewrite. Using Rust would
=C2= =A0=C2=A0make it more testable.
=C2=A0=C2=A0https= ://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd

*= nscd. Currently C, but confusing and with no test coverage. I've
= =C2=A0=C2=A0contemplated a rewrite myself, but I don't want to do it in= C.
=C2=A0=C2=A0https://github.com/freebsd/freebsd-src= /tree/main/usr.sbin/nscd

* The userland portion of the 802.11ac = and Lightning stacks. scottl suggested
=C2=A0=C2=A0that these were good = candidates for Rust.

* freebsd-kpi-r14-0 . https://crates.io/crates/fr= eebsd-kpi-r14-0

Stuff that can live in ports, but would be nicer= in base
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

* gstat-rs https://crates.io/crates/gstat
* geom-exporter (I've started this, but haven't published it)
=
* nfs-exporter https://crates.io/crates/freebsd-nfs-exporter
* virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But if the=C2=A0=C2=A0connection to bhyve(8) is too intimate, it might be hard to d= o in ports.
=C2=A0=C2=A0https://gitlab.com/virtio-fs/virtiofsd

* ja= il-exporter https://crates.io/crates/jail_exporter

* Various jail mana= gers have been attempted in Rust. I think these are fine in
=C2=A0=C2=A0= ports, but others like Goran Mekic have opined that they should be moved to=
=C2=A0=C2=A0base instead.

* musikid's pjdfstest rewrite. I t= hink it would be great to start using this
=C2=A0=C2=A0to test the base = system's file systems. If the tests themselves lived in
=C2=A0=C2=A0= base, they would be easier to sync with file system development.
=C2=A0= =C2=A0ht= tps://github.com/musikid/pjdfstest

* pf-rs. I suspect that the A= PI isn't very stable.
=C2=A0=C2=A0https://crates.io/crates/pf-rs

* benc= hpmc. The pmc counter names changes between releases.
=C2=A0=C2=A0https://crates.io= /crates/benchpmc

FreeBSD-related applications that are just fine= in ports
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D

* fsx-rs. Unlike pjdfstest, thi= s only tests datapath APIs. Those are usually
=C2=A0=C2=A0more stable th= an control path APIs, so I think there's little to be gained by
=C2= =A0=C2=A0moving this into base. https://crates.io/crates/fsx

* ztop. It uses ZFS= 's kstats sysctl interface, which is pretty stable.
=C2=A0=C2=A0https://crates.io/c= rates/ztop

* iocage-provision https://crates.io/crates/iocage-provi= sion

* rsblk https://crates.io/crates/rsblk

* xfuse https://github.com= /KhaledEmaraDev/xfuse

Other FreeBSD-related libraries in Rust=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
Just see the list at https://crates.= io/keywords/freebsd
=C2=A0
--000000000000a39865060f682804-- From nobody Sat Jan 20 22:35:30 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THWXY6h2mz57fnw for ; Sat, 20 Jan 2024 22:35:41 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THWXY3cDrz54ff for ; Sat, 20 Jan 2024 22:35:41 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-55a43f9a6c1so2006051a12.1 for ; Sat, 20 Jan 2024 14:35:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705790140; x=1706394940; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=TeqEA6JaFkOuJPzcOyO+N5ZIZ+NQFQD+juhIpuCc8N8=; b=FhEk5oORNgylV2HkRsNNr26vnZzZDxbCabTVYSzewdyuCsJUA0n0b0Vt0MVdRrmp18 TtoQm56orXoJX4V8l22sU6vW29DbJln7MeUqPIkpBX1JfeEuEs2ZAJppeDru043z+KGg Diopf/VzP0leKzDa6VFNgGvprsAN/hmF+dCVJj5rlsB6yecGI043GuaPUveeE89T5V4q ZCWkICoJG/Yf4ntcoxG7ytjQjqLDYF+ZGF1p09Wb+C8CvI4s+ohkC/jmb8A1Ep+QngfF BjUesTd7rq7fMiMKqKMye7qFb4XJlO4M9PKlAB8kdmU7BSA72kH4FGJ8Tjw3WM/qpa4S w7xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705790140; x=1706394940; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=TeqEA6JaFkOuJPzcOyO+N5ZIZ+NQFQD+juhIpuCc8N8=; b=YR8lwzksgmzKLFUJHcE5h0eEKIV10YLmW3/tnRpUmqkD2ZIK/9wFgM1dyMQkgsuB8g JeVS08D9eSvqOhW0dRaQs1lmQ5IXViz8jI5oEvih/7o+V8r91ww7FMvvANalXgwNMek6 Htb1AKVE3mA3tFOIkshXrnAdOR3lf1UEgziWZSaiZQysfbemwKo3KD6smsDfAF4L6lxz wSsUK6Zfv+vlPjRwIxcO9FZyaxlS1xo+wpbmYCgdSDtNklkSvT9lnCeFf2SpyRfSma3v GEfvik2RkIFi62ftLBwFbnFq8PEOT6ij8oMnXY1bdOk+lq2x9nXz2/obSrZVwnat+lqz R2/Q== X-Gm-Message-State: AOJu0YwfM0II8ZWrBC61vcgLP5kkNGL/2h/8GHGzo9w8KE23s08IM2kC ET5g64748JmmararHu7qj59AYPISb4Tw98WHMq52yzT9FdOiKc+V0ZlbCe3DAJerQ13+mN9fcw9 kJUrOlkO1hkstyEDLYiRwXmWWAe/4K5BsjvOr5Q== X-Google-Smtp-Source: AGHT+IGnHzBMvwuQw3ORXbDULOhWbPAhg6pXLh/N4P4sechho2IFr6+lem2UJEfZ3W1BkwY5oQYl1k6D8/Z93g9/3hY= X-Received: by 2002:a05:6402:30a7:b0:55a:181:a1e9 with SMTP id df7-20020a05640230a700b0055a0181a1e9mr1149525edb.69.1705790139575; Sat, 20 Jan 2024 14:35:39 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Warner Losh Date: Sat, 20 Jan 2024 15:35:30 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Charlie Li Cc: Gleb Popov , Alan Somers , FreeBSD Hackers , Scott Long , "Goran Meki??" Content-Type: multipart/alternative; boundary="00000000000054c36d060f683774" X-Rspamd-Queue-Id: 4THWXY3cDrz54ff X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --00000000000054c36d060f683774 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 20, 2024 at 11:25=E2=80=AFAM Charlie Li w= rote: > Warner Losh wrote: > > > > > > On Sat, Jan 20, 2024, 10:14=E2=80=AFAM Gleb Popov wrote: > > > > On Sat, Jan 20, 2024 at 7:51=E2=80=AFPM Alan Somers wrote: > > > To > > > summarize, the cost is that it would double our build times. > > > > Would it? From what I remember, a lot of rust's build time comes fr= om > > building its own LLVM. Can we reuse our base LLVM for Rust-in-base? > > > > > > No. That's not possible in general. Rust needs its own special thing > > that is not well tested fit the non rust case. > > > Rust has followed vanilla LLVM since 8.0 and they have supported the > external LLVM path since then. However, they use the shared library, LIT > and a few other extras, all of which we don't build or include in base. > They also have narrow LLVM version support windows, with only LLVM 15 > and later supported on Rust 1.74 and later. Further, release cycles are > about every month, which maybe unless we stick strictly to Editions > (language standards like C11, C++17, et al), sound like a problem for > -RELEASEs. > Yea, Rust's fast velocity coupled with narrow compatibility bands would be a bit of an impedance mismatch with the project. That's why I said it isn't possible in general (one of many reasons, the one I cited actually being obsolete it sounds). IT's the main reason why I'm suggesting that if we want rust in the base, it should be done via an external toolchain that the rust advocates would maintain via a port (just like the folks that want FreeBSD building via gcc have similar external toolchains). That way, there's not per-se dependency in base on this and we'd get a feel for how that works in practice as time passes and we have code on stable branches that needs to continue to work (to pick one potential issue at random). Until there's a way to reproducibly built programs, I maintain that it's too early to talk about rust compiler in base. Warner --00000000000054c36d060f683774 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Sat, Jan 20, 2024 at 11:25=E2=80= =AFAM Charlie Li <vishwin@freebsd= .org> wrote:
Warner Losh wrote:
>
>
> On Sat, Jan 20, 2024, 10:14=E2=80=AFAM Gleb Popov wrote:
>
>=C2=A0 =C2=A0 =C2=A0On Sat, Jan 20, 2024 at 7:51=E2=80=AFPM Alan Somers= wrote:
>=C2=A0 =C2=A0 =C2=A0 > To
>=C2=A0 =C2=A0 =C2=A0 > summarize, the cost is that it would double o= ur build times.
>
>=C2=A0 =C2=A0 =C2=A0Would it? From what I remember, a lot of rust's= build time comes from
>=C2=A0 =C2=A0 =C2=A0building its own LLVM. Can we reuse our base LLVM f= or Rust-in-base?
>
>
> No. That's not possible in general.=C2=A0 Rust needs its own speci= al thing
> that is not well tested fit the non rust case.
>
Rust has followed vanilla LLVM since 8.0 and they have supported the
external LLVM path since then. However, they use the shared library, LIT and a few other extras, all of which we don't build or include in base.=
They also have narrow LLVM version support windows, with only LLVM 15
and later supported on Rust 1.74 and later. Further, release cycles are about every month, which maybe unless we stick strictly to Editions
(language standards like C11, C++17, et al), sound like a problem for
-RELEASEs.

Yea, Rust's fast velocit= y coupled with narrow compatibility bands would
be a bit of an im= pedance mismatch with the project. That's why I said it
isn&#= 39;t possible in general (one of many reasons, the one I cited actually
being obsolete it sounds). IT's the main reason why I'm sugg= esting that
if we want rust in the base, it should be done via an= external toolchain that
the rust advocates would maintain via a = port (just like the folks that want
FreeBSD building via gcc have= similar external toolchains).=C2=A0 That way, there's
not pe= r-se dependency in base on this and we'd get a feel for how that
<= div>works in practice as time passes and we have code on stable branches
that needs to continue to work (to pick one potential issue at rand= om).
Until there's a way to reproducibly built programs, I ma= intain that it's
too early to talk about rust compiler in bas= e.

Warner
--00000000000054c36d060f683774-- From nobody Sat Jan 20 22:38:08 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THWbQ52Mdz57fr3 for ; Sat, 20 Jan 2024 22:38:10 +0000 (UTC) (envelope-from vishwin@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THWbQ4WTkz55bT; Sat, 20 Jan 2024 22:38:10 +0000 (UTC) (envelope-from vishwin@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705790290; h=from:from: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:autocrypt:autocrypt; bh=62mIXkc94Jd9lGyHCrW9+bxA9pWFbqbdHri8YDyXj8U=; b=DyKZqvGNP31N+5eWr5l6pTqAqueGAn8YMhh+VGf6IbjPW0zwwAojLloR/qn/nF5JlsxQEx SXN4kwn/GapVF06JM7yqL6qt2NrkXIyHG3TkHjfWSSlzgHxhqaukyHC/RMScKJVIsJn85M cXusPDFHgDFsoyU+Rjl0ySDsp55rgIBQXhFyshVzJ1KQaK6idNZCjnogU9wf2R0iPeCREK PorklkFrWl1ZlLgo/+rHZJQTBgmTkWr7CbZYykero+8/Fy0rRPY2h1vjApGTrMlvqUg7et CvmDLjy9c93jN61bqoM0nFMDRpULjiszGHb2cSByO0Tc6CsHRdvhDpl1xji3rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705790290; h=from:from: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:autocrypt:autocrypt; bh=62mIXkc94Jd9lGyHCrW9+bxA9pWFbqbdHri8YDyXj8U=; b=rjwfsYrEA/6KxsHaifuu8YQR4cGgd10EYHrXhbceiXnS2v7MwLMR8NeFGjzykCumVv/ISN 4rF489yo/qy3dKbG197RcyS3aNDchJFKrdLHRD0Xuy/bgjAg1H+/3vbWMEcb5SMptT/Ou6 yJjvaecUnMYieLctg3lA/MWshTxHh0+iiA10Q975bV5cNEEwo8Pa7m31Tp+1nd15DQM5Vu u2McsPmiR9RcQTT42zjtJqg+SPQKBZ5EJ7qDs4S1UhbjUjF37gJh60PlJJSDHkVnsnxuXY ljDb9f5pKTDKxJ6YZ384EG344zl68SULOAB7J0/3xyylF74yf2TL3uBMdIRI8Q== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705790290; a=rsa-sha256; cv=none; b=TH1WIL/tPd0XJba6rhq6tJLZ6Q3bCAujRlby19GE0ZB2WxG4elQmR7fLfEh90QPqT219P5 VHzV0tiITcd7CX0uqZYHYpVMerzagWfvYZSTpr+SBfDNmLTEL0rTTABTDB9AQd7/LgnLAS pfUu3wMZtzkuTw0ywLmj79D2ssXUpFbWPv0VKfZCs1FM7NTDNqrp9Fs0GAzbIc5NTNw4PI z6KgUtSI3sz+tsaDx1U6R6fyKS/Bw1+uElYOe2ClsYbXdV1ktGw7Zv/hmTjR8Gr+XoL8+R sVmSE84JdhXULnTmSfxFfkxrCu/21BZlvdNChHmuR+mGaJ/IKnqdg4iIZUm56Q== Received: from [IPV6:2601:98a:d80:d0:56ee:75ff:fe50:69b5] (unknown [IPv6:2601:98a:d80:d0:56ee:75ff:fe50:69b5]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: vishwin/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4THWbQ10YGz14t9; Sat, 20 Jan 2024 22:38:10 +0000 (UTC) (envelope-from vishwin@freebsd.org) Message-ID: Date: Sat, 20 Jan 2024 17:38:08 -0500 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Case for Rust (in the base system) Content-Language: en-GB To: Juraj Lutter , Dimitry Andric Cc: Gleb Popov , Alan Somers , FreeBSD Hackers , Warner Losh , Scott Long , meka@tilda.center References: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> <58D3A7DA-84D2-4C35-B9EB-5BD4BAA51706@FreeBSD.org> From: Charlie Li Autocrypt: addr=vishwin@freebsd.org; keydata= xjMEZFWWqBYJKwYBBAHaRw8BAQdAINFDmM+bgGkT1C4nD5a3BxgcH8Xnx5qTJbPuIBxD57LN MkNoYXJsaWUgTGkgKEZyZWVCU0QgUHJvamVjdCkgPHZpc2h3aW5ARnJlZUJTRC5vcmc+wpkE ExYKAEEWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZFWWqAIbAwUJA+3ogAULCQgHAgIiAgYV CgkICwIEFgIDAQIeBwIXgAAKCRBnj5NgWEFcyllaAP9CGICFEvTUOv5BYh/H8m49VJ87a/wd 0obeQfVBnS464AD9FopTHbjEs0HDV0ZYmJPxzJIznjumsj9gBxX0bBqqTgzOOARkVZaoEgor BgEEAZdVAQUBAQdA6BUWuG5RuT0vmtoDyCUUqiJGdtd78GM5ic3kw2AntSADAQgHwn4EGBYK ACYWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZFWWqAIbDAUJA+3ogAAKCRBnj5NgWEFcyn55 AP9ezKDCUgHqAq6JX976abb9pYdbSjxxNJqnrjgNkfhgIQD/QhR+fgnUHhcGTMBy+pYHZUGH 5DCuITsK1U4+v252uws= Organization: FreeBSD Project In-Reply-To: <58D3A7DA-84D2-4C35-B9EB-5BD4BAA51706@FreeBSD.org> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------N4fH40XR4A6wQKMY0IgazMtm" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------N4fH40XR4A6wQKMY0IgazMtm Content-Type: multipart/mixed; boundary="------------CWkTN30t0t1WXx0MFxgivPfj"; protected-headers="v1" From: Charlie Li To: Juraj Lutter , Dimitry Andric Cc: Gleb Popov , Alan Somers , FreeBSD Hackers , Warner Losh , Scott Long , meka@tilda.center Message-ID: Subject: Re: The Case for Rust (in the base system) References: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> <58D3A7DA-84D2-4C35-B9EB-5BD4BAA51706@FreeBSD.org> In-Reply-To: <58D3A7DA-84D2-4C35-B9EB-5BD4BAA51706@FreeBSD.org> --------------CWkTN30t0t1WXx0MFxgivPfj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 SnVyYWogTHV0dGVyIHdyb3RlOg0KPiBPbiAyMCBKYW4gMjAyNCwgYXQgMTg6MzQsIERpbWl0 cnkgQW5kcmljIHdyb3RlOg0KPj4gSXQgdXNlZCB0byBiZSB0aGUgY2FzZSB0aGF0IHRoZSBS dXN0IHBvcnQgY291bGQgbm90IHVzZSBhbiBMTFZNIHBvcnQsDQo+PiBidXQgaGFkIHRvIHVz ZSBpdHMgb3duIGNvcHksIGJ1dCBpdCBzZWVtcyB0aGF0IGFzIG9mDQo+PiBodHRwczovL2Nn aXQuZnJlZWJzZC5vcmcvcG9ydHMvY29tbWl0Lz9pZD0wOThkZTViYzIxOTUgaXQgaXMgcG9z c2libGUNCj4+IGFnYWluLg0KPiANCj4gU3BlYWtpbmcgb2YgdGhpczoNCj4gDQo+IEnigJl2 ZSBub3cgdHJpZWQgdG8gYnVpbGQgcnVzdCB3aXRoIGxsdm0xNSBvbiByZWxlbmcvMTMuMiBh bmQgYWxsIEnigJl2ZSBnb3QgDQo+IHdhczoNCj4gDQo+IHduLWZyZWVic2QvcmVsZWFzZS9k ZXBzL2NhcmdvLWRhYTE4YjZmZmI1ZGM1ZGEiICItV2wsLS1nYy1zZWN0aW9ucyIgDQo+ICIt cGllIiAiLVdsLC16LHJlbHJvLC16LG5vdyIgIi1XbCwtTzEiICItbm9kZWZhdWx0bGlicyIg Ii1XbCwteixvcmlnaW4iIA0KPiAiLVdsLC1ycGF0aA0KPiAsJE9SSUdJTi8uLi9saWIiDQo+ ICDCoCA9IG5vdGU6IGxkOiBlcnJvcjogcmVsb2NhdGlvbiBSX1g4Nl82NF8zMiBjYW5ub3Qg YmUgdXNlZCBhZ2FpbnN0IA0KPiBsb2NhbCBzeW1ib2w7IHJlY29tcGlsZSB3aXRoIC1mUElD DQo+ICDCoCDCoCDCoCDCoCDCoCA+Pj4gZGVmaW5lZCBpbiANCj4gL3dya2RpcnMvdXNyL3Bv cnRzL2xhbmcvcnVzdC93b3JrL19idWlsZC94ODZfNjQtdW5rbm93bi1mcmVlYnNkL3N0YWdl MS10b29scy94ODZfNjQtdW5rbm93bi1mcmVlYnNkL3JlbGVhc2UvZGVwcy9saWJsaWJzc2gy X3N5DQo+IHMtYTYwYWYzMDkzYWRjODdjOS5ybGliKGFnZW50Lm8pDQo+ICDCoCDCoCDCoCDC oCDCoCA+Pj4gcmVmZXJlbmNlZCBieSBhZ2VudC5vOihsaWJzc2gyX2FnZW50X2luaXQpIGlu IGFyY2hpdmUgDQo+IC93cmtkaXJzL3Vzci9wb3J0cy9sYW5nL3J1c3Qvd29yay9fYnVpbGQv eDg2XzY0LXVua25vd24tZnJlZWJzZC9zdGFnZTEtdG9vbHMveDg2XzY0DQo+IC11bmtub3du LWZyZWVic2QvcmVsZWFzZS9kZXBzL2xpYmxpYnNzaDJfc3lzLWE2MGFmMzA5M2FkYzg3Yzku cmxpYg0KPiANCj4gDQo+IElzIHRoaXMgc29tZXRoaW5nIHRoYXQgY2FuIGJlIGZpeGVkIGVh c2lseT8NCj4gDQpJIGhhdmVuJ3Qgc2VlbiBhbnkgb3RoZXIgcmVwb3J0cyBvZiB0aGlzIHll dC4gSG93ZXZlciwgd2hlbiBidWlsZGluZyANCndpdGggZXh0ZXJuYWwgTExWTSwgZXZlbiB0 aG91Z2ggY29tcGF0aWJpbGl0eSBiYW5kcyBleGlzdCwgaXQgaXMgYWx3YXlzIA0KcmVjb21t ZW5kZWQgdG8gdXNlIHRoZSBsYXRlc3QgTExWTSByZWxlYXNlLCBjdXJyZW50bHkgMTcuDQoN Ci0tIA0KQ2hhcmxpZSBMaQ0KLi4ubm9wZSwgc3RpbGwgZG9uJ3QgaGF2ZSBhbiBleGl0IGxp bmUuDQoNCg== --------------CWkTN30t0t1WXx0MFxgivPfj-- --------------N4fH40XR4A6wQKMY0IgazMtm Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZaxLUAUDAAAAAAAKCRBnj5NgWEFcyp2f AP40l/fyw9qo0op7R/h1sP5tJdgc9RtmoWyMuDIHxl7UUAD8CW/eb7Jvo/1397f0OhItRmJz532r 04TtRTT9LUyylws= =TfJZ -----END PGP SIGNATURE----- --------------N4fH40XR4A6wQKMY0IgazMtm-- From nobody Sat Jan 20 23:22:47 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THXb923kkz57khC for ; Sat, 20 Jan 2024 23:23:01 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-ot1-f53.google.com (mail-ot1-f53.google.com [209.85.210.53]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THXb909Dvz3xJw; Sat, 20 Jan 2024 23:23:01 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ot1-f53.google.com with SMTP id 46e09a7af769-6e0e99adb3bso37213a34.3; Sat, 20 Jan 2024 15:23:00 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705792980; x=1706397780; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=5+nheKYWjyJAhguRS4x6qy7OD35oLuxTy7hLcuxjrMA=; b=RxqAe595nKhzFJ1YLnyCBkkH0ZfDcjE/4r9TUJcRQ5a/lP3kr0NxX15QaogpxJOeoj KnCC6nr9xiCqBqfNdqIwDqfh/bkXVrb561eH1IEqCfIOPobZVCAFD3b1arOiYDkv9Kjl sn5AtIWuNN8QCSJi9axPJQRgUc3cDEv4dWp4aeBe3F8i5S9x6/R7QGB5UgE4Ottl6Ae9 8VnfKwt8wO+sIc7FmtqXc06xgHa03LmFuzGVyniiR0+R2KBeTSnsKHinZLm9Otgds/c0 oPG9yMGXUeskYQWf2rv0imgGuwiw4Z1HmiUOI6SyAk13Hoe635GbtEpM2jcjW1K5BwHa D+0w== X-Gm-Message-State: AOJu0YyC2xq6TkBbvi3RaXgQ9EKVlTv+1XpN09tLEbDpRiD5uL+3zzh2 sWVo9M8LdAZP/rz95cs5LAdx8cYvHLt1ETKYbE/slvwkA2mKXNbsMxfeRJfaa2vD+bOYJUSkAkZ pT8j6k2XH/eWDr+HRW3ewd4CBhdc= X-Google-Smtp-Source: AGHT+IHYtCa+Riz3HDe9D5wOJfj3B4Uxkdcan/Q+V0kQCQ4sKNSligiYnuvMcRo3vnV0pIacUCxa3tHSR9cStFBkU/0= X-Received: by 2002:a05:6358:3413:b0:175:c179:7515 with SMTP id h19-20020a056358341300b00175c1797515mr1673126rwd.46.1705792979687; Sat, 20 Jan 2024 15:22:59 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> In-Reply-To: From: Alan Somers Date: Sat, 20 Jan 2024 16:22:47 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Warner Losh Cc: Aleksandr Fedorov , FreeBSD Hackers , Scott Long , "meka@tilda.center" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4THXb909Dvz3xJw X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Sat, Jan 20, 2024 at 3:31=E2=80=AFPM Warner Losh wrote: > > > > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov wrote: >> >> What about external dependencies? >> >> https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L= 19 >> https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 >> >> Is there any plan for which crates we should take into the base system? >> >> We have had C++ in base for many years, but I don=E2=80=99t see any good= libraries for CLI, logging, JSON, etc. >> >> https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-t= ools >> >> Where is the support for Freebsd as a primary platform? ARM, RISC-V, Pow= er? Should we rewrite devd? >> >> I think we need to start by providing official repositories (e.g git.Fre= eBSD.org/rust.git or git.FreeBSD.org/go.git) >> for different languages that include stable bindings to the system API: >> - sysctl >> - libgeom >> - libifconfig >> - netgraph >> - jail >> - etc. >> >> So that it=E2=80=99s not just some anonymous on crates.io that represent= s these bindings, but our community. >> Officially, with support for a stable ABI for releases, security patches= , etc. >> >> After this, it will be possible to think about which components to inclu= de in the base system. >> >> I would be glad to see a more modern language than C in the database, bu= t I=E2=80=99m afraid that it will be like with C++, >> that we will get a couple of daemons and utilities and that=E2=80=99s al= l. > > > These are all good questions that need good answers, though necessarily t= o get started. > > But the other question that occured to me after my last posting was "What= about build integration?" > How much of the rust automation do we take in vs how much do we drive fro= m a future bsd.rust.mk. > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely need= one for what we traditionally > think of as libraries (which may or may not map 1:1 onto crates: we could= have c callable libraries > written in rust in the future, for example) and one for binaries. Initia= lly, though, if we go with the > 'make rust tests possible' then we'd likely need the appropriate packages= installed for whatever > dependencies we'd have in the tests. This would give us a taste for what = we'd need to do for > base, I'd think. Once we had that notion, I can easily see there needing = to be some sort of > rust bindings for ATF/kyua as one of the first libraries / crates that wo= uld test that aspect of > the build system. That all would be up to the people writing the tests in= rust, I'd imagine. > > While I could jot out the basics of this integration (so one could just a= dd the rust > tools to a subdir or subdirs, include the bsd.rust.mk or whatever and the= n it would build > if rust is enabled, and would emit a warning it was skipped because rust = was disabled). > We'd find out if this is workable or not and iterate from there. But that= would also require > active participation from the rust advocates to make it a reality: I can = put together the > build infrastructure for the disabled case, but likely can't on my own do= the rust enabled > case. I'd be happy to work with someone to do that, but I'm not going to = be able to do > that myself: my need for rust is slight, my knowledge of rust is weak, et= c. Working with > someone (or ideally several someones), though it could become reality. So= please contact > me if you'd like to work on this. That sounds like a reasonable approach. But what would be the first tool or test suite to write in Rust? The fusefs tests are now 16 kSLOC and I don't fancy rewriting them. The tests that I DO want to write are those that involve fsx-rs. But those won't actually need bsd.rust.mk, because they'll just be short sh scripts that invoke a tool from ports. I just need a ports committer to approve https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D276005 . ATM I don't have a ready project to be imp's guinea pig. -Alan From nobody Sat Jan 20 23:50:29 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THYC83S9vz57nHB for ; Sat, 20 Jan 2024 23:50:44 +0000 (UTC) (envelope-from tomek@cedro.info) Received: from mail-qk1-x72e.google.com (mail-qk1-x72e.google.com [IPv6:2607:f8b0:4864:20::72e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THYC74j93z41GF for ; Sat, 20 Jan 2024 23:50:43 +0000 (UTC) (envelope-from tomek@cedro.info) Authentication-Results: mx1.freebsd.org; none Received: by mail-qk1-x72e.google.com with SMTP id af79cd13be357-7831ed13d39so198238185a.0 for ; Sat, 20 Jan 2024 15:50:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=cedro.info; s=google; t=1705794642; x=1706399442; darn=freebsd.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=qPpcKWtJs/+UQWWTFkMWoeuT5hR05gxwDF4kmRygqx4=; b=Y60h2od2E/k3QwiJUurbQP2UB4kUKakLQqSCRqtVUfANqjuBK+nFmO51aMbcda3eLZ y3/5qDQMPHN/77513ktMOMS9jiu2+nGCcNcIY9GlfivOnktykBf8doI1FwRvUzEu2fxa hGzB9AJPFHBpXx9JMM6Btpk4KyT86aizLDNQ7SaXtDG6xSnITscWSIDhvS6y1vy2DxCA xrd/xH+JdBnf1/TR5OO2YDw1W37EJOOrxCNTYy6H296nYf4TH6/NAOYBLJtoKvkk5Jap DSxI/fiL5qgwxHPC5ifqS0QAMSMeSXUGcDWsOiF9097nXTbhPjjATOOdxpFr20wwelWa j5gw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705794642; x=1706399442; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qPpcKWtJs/+UQWWTFkMWoeuT5hR05gxwDF4kmRygqx4=; b=cSyA/4KJgOKTabMPMFscm4NAtd1ykqIW4tNY6IEiegHa+oaFOlIUkU5JY1TOls2N3+ 3cEphMtOkqPapWCLKGMwMKTr0swtZIsWRomSKYojuFi8b//kHq10vixVKOn6Ss8xG8dh 4sZcjU06w2eqoWJZ3T3qUMhXNBfzvP6Zc43KwMbZoflIbJ3CygqapQM+mceLpGn+5ZHe ZNrivWSuMu8JWbrtOAGaf5PoF6iU5C5xqFcoRDExl4DC2JL08p0MMdlFW0v3pXssicz4 ixX3ftbagUnv36m01vXwB7C1LW6NF9qG/Vc8iQZ6hScPBw+6k7RdP1HzJw3ctGBl5Cd0 YJuw== X-Gm-Message-State: AOJu0YyRhd2XLNCoRvNQsr04ccB6PDpHTtT5MQ9Jh95tVXXN5RCwLIoA S+EMADUmC1Y3RDUNDX00P/CKy+aL2rc74Pe0xPvgrjr0BpZL8rfX/UYhf8nN2w== X-Google-Smtp-Source: AGHT+IGUBn5x9GHE1LpajXNyzQGHdAE+R3TIKunopeeS7Cfo/KV2ocgxvsEGghkeN/lRvmf12t4xsQ== X-Received: by 2002:a05:620a:5220:b0:783:8dec:2240 with SMTP id dc32-20020a05620a522000b007838dec2240mr2676464qkb.125.1705794642074; Sat, 20 Jan 2024 15:50:42 -0800 (PST) Received: from mail-qk1-f176.google.com (mail-qk1-f176.google.com. [209.85.222.176]) by smtp.gmail.com with ESMTPSA id y14-20020a37e30e000000b00783862e1a89sm909263qki.11.2024.01.20.15.50.41 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 20 Jan 2024 15:50:41 -0800 (PST) Received: by mail-qk1-f176.google.com with SMTP id af79cd13be357-78313f4d149so206662685a.1; Sat, 20 Jan 2024 15:50:41 -0800 (PST) X-Received: by 2002:a05:620a:118d:b0:783:6831:70e3 with SMTP id b13-20020a05620a118d00b00783683170e3mr2591969qkk.142.1705794641305; Sat, 20 Jan 2024 15:50:41 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: In-Reply-To: From: Tomek CEDRO Date: Sun, 21 Jan 2024 00:50:29 +0100 X-Gmail-Original-Message-ID: Message-ID: Subject: Re: The Case for Rust (in the base system) To: Warner Losh Cc: Alan Somers , FreeBSD Hackers , "Goran Meki??" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4THYC74j93z41GF X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US] On Sat, Jan 20, 2024 at 7:37=E2=80=AFPM Warner Losh wrote: > (..) > So no, we aren't going to rush headlong into fullscale rust replacement o= f all the things. However I'll note Linux hasn't done that either. They are= taking a one step at a time approach. Step one is build integration with a= n external toolchain, imho. Until we have that, 0 Rust will be in the syste= m. We already can do ports... but if you want it more central the first ste= ps will be in making it possible to build rust binaries at all in a repeata= ble way. Good points IMP :-) Aside from complex and quickly changing / evolving / time and energy consuming dependencies this is a different programming language that requires solid group of developers while most people already know C they would have to invest time to learn Rust and its environment. All this puts heavy weight into core OS that was always minimal and expandable with the ports tree and I would love it to stay that way. Solid backward/forward (and self) compatibility and long term maintenance are the strongest parts of the FreeBSD. Also new Rust tools can be implemented as ports to provide "new" and "better" functionalities competing with existing tools but not to replace them. If that works don't fix it + freedom of choice versus history rewrite :-) I should add here some positive remark that I am aware of efficiency of some Rust tools that could not be implemented otherwise. For instance ARM's CMSIS Pack Manager is implemented in Rust (even as Python module) and only this approach provided decent efficiency as compared to previous C/C++ implementation. This is additional module to pyOCD (On-Chip-Debugger utility implemented in Python) that provides important but still _optional_ and _external_ functionality. This tandem works fine and people have a choice on what they want to use. -- CeDeROM, SQ7MHZ, http://www.tomek.cedro.info From nobody Sun Jan 21 02:06:11 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THcCm0zKdz581R8 for ; Sun, 21 Jan 2024 02:06:28 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Received: from www121.sakura.ne.jp (www121.sakura.ne.jp [153.125.133.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THcCl2pWSz4HN2; Sun, 21 Jan 2024 02:06:26 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Authentication-Results: mx1.freebsd.org; none Received: from kalamity.joker.local (123-1-91-49.area1b.commufa.jp [123.1.91.49]) (authenticated bits=0) by www121.sakura.ne.jp (8.17.1/8.17.1/[SAKURA-WEB]/20201212) with ESMTPA id 40L26BUV010146; Sun, 21 Jan 2024 11:06:12 +0900 (JST) (envelope-from junchoon@dec.sakura.ne.jp) Date: Sun, 21 Jan 2024 11:06:11 +0900 From: Tomoaki AOKI To: Warner Losh Cc: Aleksandr Fedorov , Alan Somers , FreeBSD Hackers , Scott Long , "meka@tilda.center" Subject: Re: The Case for Rust (in the base system) Message-Id: <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> In-Reply-To: References: <1673801705774097@mail.yandex.ru> Organization: Junchoon corps X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.33; amd64-portbld-freebsd14.0) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4THcCl2pWSz4HN2 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:7684, ipnet:153.125.128.0/18, country:JP] On Sat, 20 Jan 2024 15:31:23 -0700 Warner Losh wrote: > On Sat, Jan 20, 2024 at 11:45 AM Aleksandr Fedorov > wrote: > > > What about external dependencies? > > > > https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L19 > > https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > > > > Is there any plan for which crates we should take into the base system? > > > > We have had C++ in base for many years, but I don’t see any good libraries > > for CLI, logging, JSON, etc. > > > > > > https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-tools > > > > Where is the support for Freebsd as a primary platform? ARM, RISC-V, > > Power? Should we rewrite devd? > > > > I think we need to start by providing official repositories (e.g > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > > for different languages that include stable bindings to the system API: > > - sysctl > > - libgeom > > - libifconfig > > - netgraph > > - jail > > - etc. > > > > So that it’s not just some anonymous on crates.io that represents these > > bindings, but our community. > > Officially, with support for a stable ABI for releases, security patches, > > etc. > > > > After this, it will be possible to think about which components to include > > in the base system. > > > > I would be glad to see a more modern language than C in the database, but > > I’m afraid that it will be like with C++, > > that we will get a couple of daemons and utilities and that’s all. > > > > These are all good questions that need good answers, though necessarily to > get started. > > But the other question that occured to me after my last posting was "What > about build integration?" > How much of the rust automation do we take in vs how much do we drive from > a future bsd.rust.mk. > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely need > one for what we traditionally > think of as libraries (which may or may not map 1:1 onto crates: we could > have c callable libraries > written in rust in the future, for example) and one for binaries. > Initially, though, if we go with the > 'make rust tests possible' then we'd likely need the appropriate packages > installed for whatever > dependencies we'd have in the tests. This would give us a taste for what > we'd need to do for > base, I'd think. Once we had that notion, I can easily see there needing to > be some sort of > rust bindings for ATF/kyua as one of the first libraries / crates that > would test that aspect of > the build system. That all would be up to the people writing the tests in > rust, I'd imagine. > > While I could jot out the basics of this integration (so one could just add > the rust > tools to a subdir or subdirs, include the bsd.rust.mk or whatever and then > it would build > if rust is enabled, and would emit a warning it was skipped because rust > was disabled). > We'd find out if this is workable or not and iterate from there. But that > would also require > active participation from the rust advocates to make it a reality: I can > put together the > build infrastructure for the disabled case, but likely can't on my own do > the rust enabled > case. I'd be happy to work with someone to do that, but I'm not going to be > able to do > that myself: my need for rust is slight, my knowledge of rust is weak, etc. > Working with > someone (or ideally several someones), though it could become reality. So > please contact > me if you'd like to work on this. > > Warner One way to go could be moving programs rewritten with rust to ports. There are some programs (not in rust, though) moved to ports, like rcs. Currently, it would not be so realistic, but once we completely switch to pkgbase, IIUC, programs in base can sanely depemd on ports programs, excluding kernel and fundamental libraries. As non-rust consumers of graphics/librsvg2-rust can sanely link with it, I assume kmods in ports written in rust can kldload'ed sanely. This could be a good starting point. And would be not all, but test for rust libraries could be implemented with C/C++ or any other language suitable, if the rust libraries can sanely linked with test codes. Am I wrong? > > 20.01.2024, 19:51, "Alan Somers" : > > > > In a recent thread on src-committers, we discussed the costs and > > benefits of including Rust code in the FreeBSD base system. To > > summarize, the cost is that it would double our build times. imp > > suggested adding an additional step after buildworld for stuff that > > requires an external toolchain. That would ease the build time pain. > > The benefit is that some tools would become easier to write, or even > > become possible. Here is a list of actual and potential Rust projects > > that could benefit from being in-tree. If anybody else has items to > > add, I suggest moving this into the project wiki: > > > > Stuff that could only be written in Rust if it were in base > > =========================================================== > > > > * ctl-exporter (I started this, but discovered that the CTL stats API is > > unstable, so it can't live in ports. Instead, I had to do it in C). > > > > https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a86401469181a67ec34 > > > > * fusefs tests. Absolutely impossible to do in C. I considered Rust, but > > went > > with C++ so they could live in base. They are too closely coupled to > > fusefs(5) to live out-of-tree. > > https://github.com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs > > > > * devd. Currently C++, but imp suggested a rewrite. > > https://github.com/freebsd/freebsd-src/tree/main/sbin/devd > > > > * zfsd. Currently C++, but I've long pondered a rewrite. Using Rust would > > make it more testable. > > https://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd > > > > * nscd. Currently C, but confusing and with no test coverage. I've > > contemplated a rewrite myself, but I don't want to do it in C. > > https://github.com/freebsd/freebsd-src/tree/main/usr.sbin/nscd > > > > * The userland portion of the 802.11ac and Lightning stacks. scottl > > suggested > > that these were good candidates for Rust. > > > > * freebsd-kpi-r14-0 . https://crates.io/crates/freebsd-kpi-r14-0 > > > > Stuff that can live in ports, but would be nicer in base > > ======================================================== > > > > * gstat-rs https://crates.io/crates/gstat > > > > * geom-exporter (I've started this, but haven't published it) > > > > * nfs-exporter https://crates.io/crates/freebsd-nfs-exporter > > > > * virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But if the > > connection to bhyve(8) is too intimate, it might be hard to do in ports. > > https://gitlab.com/virtio-fs/virtiofsd > > > > * jail-exporter https://crates.io/crates/jail_exporter > > > > * Various jail managers have been attempted in Rust. I think these are > > fine in > > ports, but others like Goran Mekic have opined that they should be moved > > to > > base instead. > > > > * musikid's pjdfstest rewrite. I think it would be great to start using > > this > > to test the base system's file systems. If the tests themselves lived in > > base, they would be easier to sync with file system development. > > https://github.com/musikid/pjdfstest > > > > * pf-rs. I suspect that the API isn't very stable. > > https://crates.io/crates/pf-rs > > > > * benchpmc. The pmc counter names changes between releases. > > https://crates.io/crates/benchpmc > > > > FreeBSD-related applications that are just fine in ports > > ========================================================= > > > > * fsx-rs. Unlike pjdfstest, this only tests datapath APIs. Those are > > usually > > more stable than control path APIs, so I think there's little to be > > gained by > > moving this into base. https://crates.io/crates/fsx > > > > * ztop. It uses ZFS's kstats sysctl interface, which is pretty stable. > > https://crates.io/crates/ztop > > > > * iocage-provision https://crates.io/crates/iocage-provision > > > > * rsblk https://crates.io/crates/rsblk > > > > * xfuse https://github.com/KhaledEmaraDev/xfuse > > > > Other FreeBSD-related libraries in Rust > > ======================================= > > Just see the list at https://crates.io/keywords/freebsd -- Tomoaki AOKI From nobody Sun Jan 21 02:19:55 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THcWZ20QMz582Pj for ; Sun, 21 Jan 2024 02:20:10 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-qt1-f176.google.com (mail-qt1-f176.google.com [209.85.160.176]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THcWZ05V7z4JX3; Sun, 21 Jan 2024 02:20:10 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-qt1-f176.google.com with SMTP id d75a77b69052e-429fc7a1eacso21947191cf.2; Sat, 20 Jan 2024 18:20:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705803609; x=1706408409; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=C1wkEMTjODFXuksI8+9RB/epgV0GbmEx+DFdhrV9n6k=; b=eilyj3BiUJxW7rSiF7WnUL66VZlARgIBhNQHAE12UmMLLNvnHKWFTsnaKmUWIVfLzD ScEitLCMN+LGbWerV01Y9YCHhhK2VE2fnvnIP97cWhs3giTGBSkWYVgCArZ+9wIgHHqL gp3kOkKThxs0+KyAqEqaPoOrrINcaz6fumKwM96nyLi1fgzhfJyjnRhCRwXGY65fc8WB 86pFxGS9U4dTgKhUyFl9hlShSwCNZecIPjEYVc0kjW3qCNOkLQF/Nv8P3kobPv2U33Gm oiqgC8cUozDQna1yD9QZZb9DhAErk6+sbBcyahKNoFmBAlnLdM2n0oR2ZzB7eJnsWgdz e7KQ== X-Gm-Message-State: AOJu0YyOneCcEBw1A96A2kDOPl69iuHwIiFq6OQMG8vu2dknb8+XmR7H 1j6hjJ0zCTVYwsUGkM7U4T7I7trlFBATQqf1N3t4P8M0ruQWlU0DO0JZxg6szBaMxFSWKHsMUk6 7C+SKGj9LJAEIU6KS+Ih3zoqIGME= X-Google-Smtp-Source: AGHT+IFxERWxsi7fN/b0dQr4kC4wL4U5Oqr+bpAl/V5KUNDuYowm0SWF3ulxqgIbtLbCTJ7mSsIYr+86SfNX+6tmJnk= X-Received: by 2002:a05:6214:21a6:b0:681:7571:c508 with SMTP id t6-20020a05621421a600b006817571c508mr3065955qvc.7.1705803607453; Sat, 20 Jan 2024 18:20:07 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> In-Reply-To: <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> From: Alan Somers Date: Sat, 20 Jan 2024 19:19:55 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Tomoaki AOKI Cc: Warner Losh , Aleksandr Fedorov , FreeBSD Hackers , Scott Long , "meka@tilda.center" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4THcWZ05V7z4JX3 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Sat, Jan 20, 2024 at 7:06=E2=80=AFPM Tomoaki AOKI wrote: > > On Sat, 20 Jan 2024 15:31:23 -0700 > Warner Losh wrote: > > > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov > > wrote: > > > > > What about external dependencies? > > > > > > https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.tom= l#L19 > > > https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > > > > > > Is there any plan for which crates we should take into the base syste= m? > > > > > > We have had C++ in base for many years, but I don=E2=80=99t see any g= ood libraries > > > for CLI, logging, JSON, etc. > > > > > > > > > https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-hos= t-tools > > > > > > Where is the support for Freebsd as a primary platform? ARM, RISC-V, > > > Power? Should we rewrite devd? > > > > > > I think we need to start by providing official repositories (e.g > > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > > > for different languages that include stable bindings to the system AP= I: > > > - sysctl > > > - libgeom > > > - libifconfig > > > - netgraph > > > - jail > > > - etc. > > > > > > So that it=E2=80=99s not just some anonymous on crates.io that repres= ents these > > > bindings, but our community. > > > Officially, with support for a stable ABI for releases, security patc= hes, > > > etc. > > > > > > After this, it will be possible to think about which components to in= clude > > > in the base system. > > > > > > I would be glad to see a more modern language than C in the database,= but > > > I=E2=80=99m afraid that it will be like with C++, > > > that we will get a couple of daemons and utilities and that=E2=80=99s= all. > > > > > > > These are all good questions that need good answers, though necessarily= to > > get started. > > > > But the other question that occured to me after my last posting was "Wh= at > > about build integration?" > > How much of the rust automation do we take in vs how much do we drive f= rom > > a future bsd.rust.mk. > > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely ne= ed > > one for what we traditionally > > think of as libraries (which may or may not map 1:1 onto crates: we cou= ld > > have c callable libraries > > written in rust in the future, for example) and one for binaries. > > Initially, though, if we go with the > > 'make rust tests possible' then we'd likely need the appropriate packag= es > > installed for whatever > > dependencies we'd have in the tests. This would give us a taste for wha= t > > we'd need to do for > > base, I'd think. Once we had that notion, I can easily see there needin= g to > > be some sort of > > rust bindings for ATF/kyua as one of the first libraries / crates that > > would test that aspect of > > the build system. That all would be up to the people writing the tests = in > > rust, I'd imagine. > > > > While I could jot out the basics of this integration (so one could just= add > > the rust > > tools to a subdir or subdirs, include the bsd.rust.mk or whatever and t= hen > > it would build > > if rust is enabled, and would emit a warning it was skipped because rus= t > > was disabled). > > We'd find out if this is workable or not and iterate from there. But th= at > > would also require > > active participation from the rust advocates to make it a reality: I ca= n > > put together the > > build infrastructure for the disabled case, but likely can't on my own = do > > the rust enabled > > case. I'd be happy to work with someone to do that, but I'm not going t= o be > > able to do > > that myself: my need for rust is slight, my knowledge of rust is weak, = etc. > > Working with > > someone (or ideally several someones), though it could become reality. = So > > please contact > > me if you'd like to work on this. > > > > Warner > > One way to go could be moving programs rewritten with rust to ports. > There are some programs (not in rust, though) moved to ports, like rcs. I've already done this with a few, though I didn't delete the C versions from base. usr.bin/gstat =3D> sysutils/gstat-rs tools/regression/fsx =3D> devel/fsx > > Currently, it would not be so realistic, but once we completely switch > to pkgbase, IIUC, programs in base can sanely depemd on ports programs, > excluding kernel and fundamental libraries. > > As non-rust consumers of graphics/librsvg2-rust can sanely link with > it, I assume kmods in ports written in rust can kldload'ed sanely. > This could be a good starting point. > > And would be not all, but test for rust libraries could be implemented > with C/C++ or any other language suitable, if the rust libraries can > sanely linked with test codes. Yes, if the Rust library implements a C interface, which most don't. > > Am I wrong? From nobody Sun Jan 21 03:30:55 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THf5V2yPqz5884N for ; Sun, 21 Jan 2024 03:31:10 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THf5V0djKz4PY0 for ; Sun, 21 Jan 2024 03:31:10 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-wm1-x32a.google.com with SMTP id 5b1f17b1804b1-40e86a9fc4bso27091345e9.2 for ; Sat, 20 Jan 2024 19:31:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705807867; x=1706412667; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=cCxrEOaKv/lDs3/gg58OCxyiPik5Tcb+Ftrduy7BA48=; b=wD1bW0PSc090Zf+h53BM7Mq41gFr7P3ftWEGK2R6Sp/CRvOto4dqhSuxGCN8js+c4H 62CNRFzv6iOuZIEIHR5vCMSRZQlUILxRR7EhOlSC+UH4Dtt6hs43giJJuidi5eG+0sN+ YjypUwIByt/rJFN1I/lBuZQROFjau8BDIgLHV1e4OF/J8pRrxc0wleMaUPodZNunc6wB kC5LROuv5r931avwGWJkAzytbTGJlprgtxasyOHNM1nn5hS6VvU+78m/ml5Q4VePnejP 3dNYCXuIPqtqL56GMjdKplF22pvmMVyOskQLDSlgDDIcFBJb6bDYXh+Anw4qKmNDHdzg GyDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705807867; x=1706412667; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=cCxrEOaKv/lDs3/gg58OCxyiPik5Tcb+Ftrduy7BA48=; b=cAtZsiFrVDatg9cKDt+7Hk2wwm1NirT3CqIlzrsmGaT3OY0jh0tdPT0riLTDjX9UpK T5Mzg6iviEXvB0OdFoiEe/ItMm8Tqwvu8xpZP2rt3TrSmHmAB94oLn5mGmU1ZpkkvXOt Psxe7I3ewIFN17aXpr8wOGruZ0v5hebJvWIzKcRSYFYON8vplTCD8yXdTiVOobYWQJtK r0aXm0bdiRkJF4TApQSQOIZ7ct5tFodKnIOP34IVgVoIlXa/QXaTm5+AWdqbSc/vQQke M5MUSxk/32RFQfZ4lf/Q9N0E/Ci8SlhEfO1cj8XiNWPzhZrl2PoeURrkRIDarUkwFXBx 85Zg== X-Gm-Message-State: AOJu0YyqgCl0Dg50UZUDoMs1YoUqGxpHhaFy1e36d3q6VKoOSz8WjYrH AgwM4sXX+E1rzgzt1PD5KBQ/D2n85KSz0prxPeGuQQ05CR5QHT6TTlmKUiWXCI4IM1OW3OXYPjb Q9y9ENYpnoteEjJ1JVSGJMgjEh1iQbHMwt2L+og== X-Google-Smtp-Source: AGHT+IFMYY+YxmSsboiToxa5Nl5IPMYkgZ9PibNMa9HxXOltc0vg4f/1eBYRSH5vIUb7mwU4OtJ9D1QSAUZu1op55Gk= X-Received: by 2002:a05:600c:5253:b0:40e:6087:89b7 with SMTP id fc19-20020a05600c525300b0040e608789b7mr1092977wmb.107.1705807867175; Sat, 20 Jan 2024 19:31:07 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> In-Reply-To: <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> From: Warner Losh Date: Sat, 20 Jan 2024 20:30:55 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Tomoaki AOKI Cc: Aleksandr Fedorov , Alan Somers , FreeBSD Hackers , Scott Long , "Goran Meki??" Content-Type: multipart/alternative; boundary="000000000000fa7706060f6c5723" X-Rspamd-Queue-Id: 4THf5V0djKz4PY0 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000fa7706060f6c5723 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 20, 2024, 7:06=E2=80=AFPM Tomoaki AOKI wrote: > On Sat, 20 Jan 2024 15:31:23 -0700 > Warner Losh wrote: > > > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov > > > wrote: > > > > > What about external dependencies? > > > > > > > https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L1= 9 > > > https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > > > > > > Is there any plan for which crates we should take into the base syste= m? > > > > > > We have had C++ in base for many years, but I don=E2=80=99t see any g= ood > libraries > > > for CLI, logging, JSON, etc. > > > > > > > > > > https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-to= ols > > > > > > Where is the support for Freebsd as a primary platform? ARM, RISC-V, > > > Power? Should we rewrite devd? > > > > > > I think we need to start by providing official repositories (e.g > > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > > > for different languages that include stable bindings to the system AP= I: > > > - sysctl > > > - libgeom > > > - libifconfig > > > - netgraph > > > - jail > > > - etc. > > > > > > So that it=E2=80=99s not just some anonymous on crates.io that repres= ents > these > > > bindings, but our community. > > > Officially, with support for a stable ABI for releases, security > patches, > > > etc. > > > > > > After this, it will be possible to think about which components to > include > > > in the base system. > > > > > > I would be glad to see a more modern language than C in the database, > but > > > I=E2=80=99m afraid that it will be like with C++, > > > that we will get a couple of daemons and utilities and that=E2=80=99s= all. > > > > > > > These are all good questions that need good answers, though necessarily > to > > get started. > > > > But the other question that occured to me after my last posting was "Wh= at > > about build integration?" > > How much of the rust automation do we take in vs how much do we drive > from > > a future bsd.rust.mk. > > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely > need > > one for what we traditionally > > think of as libraries (which may or may not map 1:1 onto crates: we cou= ld > > have c callable libraries > > written in rust in the future, for example) and one for binaries. > > Initially, though, if we go with the > > 'make rust tests possible' then we'd likely need the appropriate packag= es > > installed for whatever > > dependencies we'd have in the tests. This would give us a taste for wha= t > > we'd need to do for > > base, I'd think. Once we had that notion, I can easily see there needin= g > to > > be some sort of > > rust bindings for ATF/kyua as one of the first libraries / crates that > > would test that aspect of > > the build system. That all would be up to the people writing the tests = in > > rust, I'd imagine. > > > > While I could jot out the basics of this integration (so one could just > add > > the rust > > tools to a subdir or subdirs, include the bsd.rust.mk or whatever and > then > > it would build > > if rust is enabled, and would emit a warning it was skipped because rus= t > > was disabled). > > We'd find out if this is workable or not and iterate from there. But th= at > > would also require > > active participation from the rust advocates to make it a reality: I ca= n > > put together the > > build infrastructure for the disabled case, but likely can't on my own = do > > the rust enabled > > case. I'd be happy to work with someone to do that, but I'm not going t= o > be > > able to do > > that myself: my need for rust is slight, my knowledge of rust is weak, > etc. > > Working with > > someone (or ideally several someones), though it could become reality. = So > > please contact > > me if you'd like to work on this. > > > > Warner > > One way to go could be moving programs rewritten with rust to ports. > There are some programs (not in rust, though) moved to ports, like rcs. > Yes. And a number of programs have been made available as ports, but not too many replace c programs. Currently, it would not be so realistic, but once we completely switch > to pkgbase, IIUC, programs in base can sanely depemd on ports programs, > excluding kernel and fundamental libraries. Possible, but I'd wager not for quite some time for fundamental things. I could be wrong on this timeline... As non-rust consumers of graphics/librsvg2-rust can sanely link with > it, I assume kmods in ports written in rust can kldload'ed sanely. > This could be a good starting point. > Kernel modules are far off om the horizon at this point. There was a proof of concept done years ago, but much has changed so an effort is needed to get back to that basic point. And would be not all, but test for rust libraries could be implemented > with C/C++ or any other language suitable, if the rust libraries can > sanely linked with test codes. > That's not a given... ABIs are hard enough without a C to rust layer sneaking in. Warner Am I wrong? > > > > > 20.01.2024, 19:51, "Alan Somers" : > > > > > > In a recent thread on src-committers, we discussed the costs and > > > benefits of including Rust code in the FreeBSD base system. To > > > summarize, the cost is that it would double our build times. imp > > > suggested adding an additional step after buildworld for stuff that > > > requires an external toolchain. That would ease the build time pain. > > > The benefit is that some tools would become easier to write, or even > > > become possible. Here is a list of actual and potential Rust projects > > > that could benefit from being in-tree. If anybody else has items to > > > add, I suggest moving this into the project wiki: > > > > > > Stuff that could only be written in Rust if it were in base > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > > > * ctl-exporter (I started this, but discovered that the CTL stats API > is > > > unstable, so it can't live in ports. Instead, I had to do it in C). > > > > > > > https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a86401= 469181a67ec34 > > > > > > * fusefs tests. Absolutely impossible to do in C. I considered Rust, > but > > > went > > > with C++ so they could live in base. They are too closely coupled t= o > > > fusefs(5) to live out-of-tree. > > > https://github.com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusef= s > > > > > > * devd. Currently C++, but imp suggested a rewrite. > > > https://github.com/freebsd/freebsd-src/tree/main/sbin/devd > > > > > > * zfsd. Currently C++, but I've long pondered a rewrite. Using Rust > would > > > make it more testable. > > > https://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd > > > > > > * nscd. Currently C, but confusing and with no test coverage. I've > > > contemplated a rewrite myself, but I don't want to do it in C. > > > https://github.com/freebsd/freebsd-src/tree/main/usr.sbin/nscd > > > > > > * The userland portion of the 802.11ac and Lightning stacks. scottl > > > suggested > > > that these were good candidates for Rust. > > > > > > * freebsd-kpi-r14-0 . https://crates.io/crates/freebsd-kpi-r14-0 > > > > > > Stuff that can live in ports, but would be nicer in base > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D > > > > > > * gstat-rs https://crates.io/crates/gstat > > > > > > * geom-exporter (I've started this, but haven't published it) > > > > > > * nfs-exporter https://crates.io/crates/freebsd-nfs-exporter > > > > > > * virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But if t= he > > > connection to bhyve(8) is too intimate, it might be hard to do in > ports. > > > https://gitlab.com/virtio-fs/virtiofsd > > > > > > * jail-exporter https://crates.io/crates/jail_exporter > > > > > > * Various jail managers have been attempted in Rust. I think these ar= e > > > fine in > > > ports, but others like Goran Mekic have opined that they should be > moved > > > to > > > base instead. > > > > > > * musikid's pjdfstest rewrite. I think it would be great to start usi= ng > > > this > > > to test the base system's file systems. If the tests themselves > lived in > > > base, they would be easier to sync with file system development. > > > https://github.com/musikid/pjdfstest > > > > > > * pf-rs. I suspect that the API isn't very stable. > > > https://crates.io/crates/pf-rs > > > > > > * benchpmc. The pmc counter names changes between releases. > > > https://crates.io/crates/benchpmc > > > > > > FreeBSD-related applications that are just fine in ports > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D > > > > > > * fsx-rs. Unlike pjdfstest, this only tests datapath APIs. Those are > > > usually > > > more stable than control path APIs, so I think there's little to be > > > gained by > > > moving this into base. https://crates.io/crates/fsx > > > > > > * ztop. It uses ZFS's kstats sysctl interface, which is pretty stable= . > > > https://crates.io/crates/ztop > > > > > > * iocage-provision https://crates.io/crates/iocage-provision > > > > > > * rsblk https://crates.io/crates/rsblk > > > > > > * xfuse https://github.com/KhaledEmaraDev/xfuse > > > > > > Other FreeBSD-related libraries in Rust > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > > Just see the list at https://crates.io/keywords/freebsd > > > -- > Tomoaki AOKI > --000000000000fa7706060f6c5723 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sat, Jan 20, 2024, 7:06=E2=80=AFPM Tomoaki AOKI <= ;junchoon@dec.sakura.ne.jp= > wrote:
On Sat, 20 Jan 2024 15:= 31:23 -0700
Warner Losh <imp@bsdimp.com> wrote:

> On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov <wigne= ddoom@yandex.ru>
> wrote:
>
> > What about external dependencies?
> >
> > https= ://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L19 > > https://gi= thub.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20
> >
> > Is there any plan for which crates we should take into the base s= ystem?
> >
> > We have had C++ in base for many years, but I don=E2=80=99t see a= ny good libraries
> > for CLI, logging, JSON, etc.
> >
> >
> > htt= ps://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-tools
> >
> > Where is the support for Freebsd as a primary platform? ARM, RISC= -V,
> > Power? Should we rewrite devd?
> >
> > I think we need to start by providing official repositories (e.g<= br> > >
git.FreeBSD.org/rust.git or g= it.FreeBSD.org/go.git)
> > for different languages that include stable bindings to the syste= m API:
> > - sysctl
> > - libgeom
> > - libifconfig
> > - netgraph
> > - jail
> > - etc.
> >
> > So that it=E2=80=99s not just some anonymous on crates.io t= hat represents these
> > bindings, but our community.
> > Officially, with support for a stable ABI for releases, security = patches,
> > etc.
> >
> > After this, it will be possible to think about which components t= o include
> > in the base system.
> >
> > I would be glad to see a more modern language than C in the datab= ase, but
> > I=E2=80=99m afraid that it will be like with C++,
> > that we will get a couple of daemons and utilities and that=E2=80= =99s all.
> >
>
> These are all good questions that need good answers, though necessaril= y to
> get started.
>
> But the other question that occured to me after my last posting was &q= uot;What
> about build integration?"
> How much of the rust automation do we take in vs how much do we drive = from
> a future bsd.rust.mk.
> I can sketch out bsd.rust.mk (to pick an arbitrary name, we= 9;d likely need
> one for what we traditionally
> think of as libraries (which may or may not map 1:1 onto crates: we co= uld
> have c callable libraries
> written in rust in the future, for example) and one for binaries.
> Initially, though, if we go with the
> 'make rust tests possible' then we'd likely need the appro= priate packages
> installed for whatever
> dependencies we'd have in the tests. This would give us a taste fo= r what
> we'd need to do for
> base, I'd think. Once we had that notion, I can easily see there n= eeding to
> be some sort of
> rust bindings for ATF/kyua as one of the first libraries / crates that=
> would test that aspect of
> the build system. That all would be up to the people writing the tests= in
> rust, I'd imagine.
>
> While I could jot out the basics of this integration (so one could jus= t add
> the rust
> tools to a subdir or subdirs, include the bsd.rust.mk or whate= ver and then
> it would build
> if rust is enabled, and would emit a warning it was skipped because ru= st
> was disabled).
> We'd find out if this is workable or not and iterate from there. B= ut that
> would also require
> active participation from the rust advocates to make it a reality: I c= an
> put together the
> build infrastructure for the disabled case, but likely can't on my= own do
> the rust enabled
> case. I'd be happy to work with someone to do that, but I'm no= t going to be
> able to do
> that myself: my need for rust is slight, my knowledge of rust is weak,= etc.
> Working with
> someone (or ideally several someones), though it could become reality.= So
> please contact
> me if you'd like to work on this.
>
> Warner

One way to go could be moving programs rewritten with rust to ports.
There are some programs (not in rust, though) moved to ports, like rcs.
=

Yes.= And a number of programs have been made available as ports, but not too ma= ny replace c programs.

<= div class=3D"gmail_quote">
Currently, it would not be so realistic, but once we completely switch
to pkgbase, IIUC, programs in base can sanely depemd on ports programs,
excluding kernel and fundamental libraries.

Possible, but I'd wager not for = quite some time for fundamental things. I could be wrong on this timeline..= .

As non-rust consumers of graphics/librsvg2-rust can sanely link with
it, I assume kmods in ports written in rust can kldload'ed sanely.
This could be a good starting point.

Kernel modules are far off om the hor= izon at this point. There was a proof of concept done years ago, but much h= as changed so an effort is needed to get back to that basic point.

And would be not all, but test for rust libraries could be implemented
with C/C++ or any other language suitable, if the rust libraries can
sanely linked with test codes.

That's not a given... ABIs are hard enoug= h without a C to rust layer sneaking in.

<= div dir=3D"auto">Warner

=
Am I wrong?


> > 20.01.2024, 19:51, "Alan Somers" <asomers@freebsd.o= rg>:
> >
> > In a recent thread on src-committers, we discussed the costs and<= br> > > benefits of including Rust code in the FreeBSD base system. To > > summarize, the cost is that it would double our build times. imp<= br> > > suggested adding an additional step after buildworld for stuff th= at
> > requires an external toolchain. That would ease the build time pa= in.
> > The benefit is that some tools would become easier to write, or e= ven
> > become possible. Here is a list of actual and potential Rust proj= ects
> > that could benefit from being in-tree. If anybody else has items = to
> > add, I suggest moving this into the project wiki:
> >
> > Stuff that could only be written in Rust if it were in base
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >
> > * ctl-exporter (I started this, but discovered that the CTL stats= API is
> >=C2=A0 =C2=A0unstable, so it can't live in ports. Instead, I h= ad to do it in C).
> >
> > https://github.com/freebsd/freebsd-src/commit/1a7f22d9c211f504f6c48a= 86401469181a67ec34
> >
> > * fusefs tests. Absolutely impossible to do in C. I considered Ru= st, but
> > went
> >=C2=A0 =C2=A0with C++ so they could live in base. They are too clo= sely coupled to
> >=C2=A0 =C2=A0fusefs(5) to live out-of-tree.
> >=C2=A0 =C2=A0https://github.com/freebsd/freebsd-src/tree/main/tests/sys/fs/fusefs > >
> > * devd. Currently C++, but imp suggested a rewrite.
> >=C2=A0 =C2=A0https://g= ithub.com/freebsd/freebsd-src/tree/main/sbin/devd
> >
> > * zfsd. Currently C++, but I've long pondered a rewrite. Usin= g Rust would
> >=C2=A0 =C2=A0make it more testable.
> >=C2=A0 =C2=A0= https://github.com/freebsd/freebsd-src/tree/main/cddl/usr.sbin/zfsd
> >
> > * nscd. Currently C, but confusing and with no test coverage. I&#= 39;ve
> >=C2=A0 =C2=A0contemplated a rewrite myself, but I don't want t= o do it in C.
> >=C2=A0 =C2=A0https= ://github.com/freebsd/freebsd-src/tree/main/usr.sbin/nscd
> >
> > * The userland portion of the 802.11ac and Lightning stacks. scot= tl
> > suggested
> >=C2=A0 =C2=A0that these were good candidates for Rust.
> >
> > * freebsd-kpi-r14-0 . https://crates.= io/crates/freebsd-kpi-r14-0
> >
> > Stuff that can live in ports, but would be nicer in base
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >
> > * gstat-rs https://crates.io/crates/gstat
> >
> > * geom-exporter (I've started this, but haven't published= it)
> >
> > * nfs-exporter https://crates.io/c= rates/freebsd-nfs-exporter
> >
> > * virtiofsd-rs . Nobody has yet tried to port it to FreeBSD. But = if the
> >=C2=A0 =C2=A0connection to bhyve(8) is too intimate, it might be h= ard to do in ports.
> >=C2=A0 =C2=A0https://gitlab.com/virtio-fs/= virtiofsd
> >
> > * jail-exporter https://crates.io/crates/= jail_exporter
> >
> > * Various jail managers have been attempted in Rust. I think thes= e are
> > fine in
> >=C2=A0 =C2=A0ports, but others like Goran Mekic have opined that t= hey should be moved
> > to
> >=C2=A0 =C2=A0base instead.
> >
> > * musikid's pjdfstest rewrite. I think it would be great to s= tart using
> > this
> >=C2=A0 =C2=A0to test the base system's file systems. If the te= sts themselves lived in
> >=C2=A0 =C2=A0base, they would be easier to sync with file system d= evelopment.
> >=C2=A0 =C2=A0https://github.com/musikid/pjd= fstest
> >
> > * pf-rs. I suspect that the API isn't very stable.
> >=C2=A0 =C2=A0https://crates.io/crates/pf-rs > >
> > * benchpmc. The pmc counter names changes between releases.
> >=C2=A0 =C2=A0https://crates.io/crates/benchpmc<= /a>
> >
> > FreeBSD-related applications that are just fine in ports
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> >
> > * fsx-rs. Unlike pjdfstest, this only tests datapath APIs. Those = are
> > usually
> >=C2=A0 =C2=A0more stable than control path APIs, so I think there&= #39;s little to be
> > gained by
> >=C2=A0 =C2=A0moving this into base.
https://crates.i= o/crates/fsx
> >
> > * ztop. It uses ZFS's kstats sysctl interface, which is prett= y stable.
> >=C2=A0 =C2=A0https://crates.io/crates/ztop
> >
> > * iocage-provision https://crates.io/c= rates/iocage-provision
> >
> > * rsblk https://crates.io/crates/rsblk
> >
> > * xfuse https://github.com/KhaledEmara= Dev/xfuse
> >
> > Other FreeBSD-related libraries in Rust
> > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> > Just see the list at https://crates.io/keywor= ds/freebsd


--
Tomoaki AOKI=C2=A0 =C2=A0 <junchoon@dec.sakura.ne.jp>
--000000000000fa7706060f6c5723-- From nobody Sun Jan 21 03:43:53 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THfNN11P6z589Xh for ; Sun, 21 Jan 2024 03:44:04 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x531.google.com (mail-ed1-x531.google.com [IPv6:2a00:1450:4864:20::531]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THfNM5lYVz4QyW for ; Sun, 21 Jan 2024 03:44:03 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x531.google.com with SMTP id 4fb4d7f45d1cf-55c02619a93so456554a12.3 for ; Sat, 20 Jan 2024 19:44:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705808642; x=1706413442; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=H92rVvrBreax8DLr7XnDPBoa76FyvHsjmYtWGvmSnwI=; b=n8NHHW7xQmFgUNG3dswd+j9EMjLuHGCaIAt+QDu6sMmQNpwEzWYvS042Y88K0rq//d v+kzkMV5s4VSZ+YD0kXJgczGkxIeRzGYEm2aQ8ycGxcnZUgisX1lESdri+uvRGFUIyv/ NoenIo3UYa92kW5ez+1QqB71UMRmM/kz4oGnAW5vuHECb8qxnJuj+RZwHGJkDNEmPFEc 6c2e7TZjFa5eH9PhRiH7N0HJz69zubl3Oc6HwA0URpLFY/xZoWMmBOh538O3j1Lwr27q tiBZEVmkSb3S5vdlV6gIIURCIyXsjrn6ixPpffSOqnVY0USmieKBVtazMpv/0RZbYuda N9Nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705808642; x=1706413442; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=H92rVvrBreax8DLr7XnDPBoa76FyvHsjmYtWGvmSnwI=; b=sNoif+05rwZDl45ghjIrCOZ8N5Cr08cpSJvLDbkcpcl/csugVTlB9RzpgoXSHkov3m 8AF+ZN19Jwesx9gzwMLFsfS2xSyCVtrxR1Hkhy9JtO8M4eqPwKUow2bAaCI2f2fY6P+3 AHwTTdpNWeVbbdmfI/sfFFUdO359wqyok7wcbO9nEmsmsZtG//rc2CoLFROf1SFw0IVR aSEX3Kseki2z8oMiP2n59r3/4qahfkepykA4/BgSNJ8NSBQquuEccExT8PFBUFN1r8Dh cIjcfvLLaQuEf+uzQKkf0W+FnOlNfryeq1Rd1u9Vmsp/P6ULxXN7FSWZgkYpoukMRP+j oWEA== X-Gm-Message-State: AOJu0Ywq7N3di4kzKK8WCfanA7u8mUj/iyyyTy2lC4n5GIEyy1wu/OJl pggJCH8qjn7BRpEorqhH8+IEbb+gJ6uXJzH7Pu0dgrJpjKNj9MWogIcl76KMMTu9WUKUVM7xSIG My7U+0xnw1C7NKifCM+tOvdl3VUJgR3EO2CoHvg== X-Google-Smtp-Source: AGHT+IGY9LA4+Cq9UdnSPfNO9ZEJzEvYJ3d+EfnkMzckkZ2KKSUwqzaw8LVBnr+fmdThEJBATCuF3caVxh2nT7kRs5Y= X-Received: by 2002:a05:6402:35cb:b0:559:d75f:4902 with SMTP id z11-20020a05640235cb00b00559d75f4902mr1315912edc.74.1705808641958; Sat, 20 Jan 2024 19:44:01 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> In-Reply-To: From: Warner Losh Date: Sat, 20 Jan 2024 20:43:53 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Alan Somers Cc: Tomoaki AOKI , Aleksandr Fedorov , FreeBSD Hackers , Scott Long , "Goran Meki??" Content-Type: multipart/alternative; boundary="00000000000028b509060f6c86b6" X-Rspamd-Queue-Id: 4THfNM5lYVz4QyW X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --00000000000028b509060f6c86b6 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 20, 2024, 7:20=E2=80=AFPM Alan Somers wro= te: > On Sat, Jan 20, 2024 at 7:06=E2=80=AFPM Tomoaki AOKI > wrote: > > > > On Sat, 20 Jan 2024 15:31:23 -0700 > > Warner Losh wrote: > > > > > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov < > wigneddoom@yandex.ru> > > > wrote: > > > > > > > What about external dependencies? > > > > > > > > > https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L1= 9 > > > > > https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > > > > > > > > Is there any plan for which crates we should take into the base > system? > > > > > > > > We have had C++ in base for many years, but I don=E2=80=99t see any= good > libraries > > > > for CLI, logging, JSON, etc. > > > > > > > > > > > > > https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-to= ols > > > > > > > > Where is the support for Freebsd as a primary platform? ARM, RISC-V= , > > > > Power? Should we rewrite devd? > > > > > > > > I think we need to start by providing official repositories (e.g > > > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > > > > for different languages that include stable bindings to the system > API: > > > > - sysctl > > > > - libgeom > > > > - libifconfig > > > > - netgraph > > > > - jail > > > > - etc. > > > > > > > > So that it=E2=80=99s not just some anonymous on crates.io that repr= esents > these > > > > bindings, but our community. > > > > Officially, with support for a stable ABI for releases, security > patches, > > > > etc. > > > > > > > > After this, it will be possible to think about which components to > include > > > > in the base system. > > > > > > > > I would be glad to see a more modern language than C in the > database, but > > > > I=E2=80=99m afraid that it will be like with C++, > > > > that we will get a couple of daemons and utilities and that=E2=80= =99s all. > > > > > > > > > > These are all good questions that need good answers, though > necessarily to > > > get started. > > > > > > But the other question that occured to me after my last posting was > "What > > > about build integration?" > > > How much of the rust automation do we take in vs how much do we drive > from > > > a future bsd.rust.mk. > > > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely > need > > > one for what we traditionally > > > think of as libraries (which may or may not map 1:1 onto crates: we > could > > > have c callable libraries > > > written in rust in the future, for example) and one for binaries. > > > Initially, though, if we go with the > > > 'make rust tests possible' then we'd likely need the appropriate > packages > > > installed for whatever > > > dependencies we'd have in the tests. This would give us a taste for > what > > > we'd need to do for > > > base, I'd think. Once we had that notion, I can easily see there > needing to > > > be some sort of > > > rust bindings for ATF/kyua as one of the first libraries / crates tha= t > > > would test that aspect of > > > the build system. That all would be up to the people writing the test= s > in > > > rust, I'd imagine. > > > > > > While I could jot out the basics of this integration (so one could > just add > > > the rust > > > tools to a subdir or subdirs, include the bsd.rust.mk or whatever and > then > > > it would build > > > if rust is enabled, and would emit a warning it was skipped because > rust > > > was disabled). > > > We'd find out if this is workable or not and iterate from there. But > that > > > would also require > > > active participation from the rust advocates to make it a reality: I > can > > > put together the > > > build infrastructure for the disabled case, but likely can't on my ow= n > do > > > the rust enabled > > > case. I'd be happy to work with someone to do that, but I'm not going > to be > > > able to do > > > that myself: my need for rust is slight, my knowledge of rust is weak= , > etc. > > > Working with > > > someone (or ideally several someones), though it could become reality= . > So > > > please contact > > > me if you'd like to work on this. > > > > > > Warner > > > > One way to go could be moving programs rewritten with rust to ports. > > There are some programs (not in rust, though) moved to ports, like rcs. > > I've already done this with a few, though I didn't delete the C > versions from base. > usr.bin/gstat =3D> sysutils/gstat-rs > tools/regression/fsx =3D> devel/fsx > So % size `which gstat-rs` `which gstat` text data bss dec hex filename 2094442 176472 568 2271482 0x22a8fa /usr/local/sbin/gstat-rs 19350 1180 41 20571 0x505b /usr/sbin/gstat % file `which gstat-rs` `which gstat` /usr/local/sbin/gstat-rs: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, FreeBSD-style, stripped /usr/sbin/gstat: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, for FreeBSD 15.0 (1500008), FreeBSD-style, stripped 8:36pm brazos:[3826]> ldd `which gstat-rs` `which gstat` /usr/local/sbin/gstat-rs: libgeom.so.5 =3D> /lib/libgeom.so.5 (0x60fd38647000) libthr.so.3 =3D> /lib/libthr.so.3 (0x60fd38b57000) libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x60fd39af1000) libc.so.7 =3D> /lib/libc.so.7 (0x60fd3be6f000) libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x60fd3a009000) libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x60fd3a55e000) /usr/sbin/gstat: libdevstat.so.7 =3D> /lib/libdevstat.so.7 (0x448867cd000) libgeom.so.5 =3D> /lib/libgeom.so.5 (0x4488710b000) libedit.so.8 =3D> /lib/libedit.so.8 (0x44887f8d000) libtinfow.so.9 =3D> /lib/libtinfow.so.9 (0x44888aab000) libncursesw.so.9 =3D> /lib/libncursesw.so.9 (0x44889c60000) libc.so.7 =3D> /lib/libc.so.7 (0x4488aaf4000) libkvm.so.7 =3D> /lib/libkvm.so.7 (0x44888f77000) libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x4488ba02000) libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x4488c68d000) libelf.so.2 =3D> /lib/libelf.so.2 (0x4488ca45000) So that looks scary, like rust is 100x larger binaries... But at runtime it's about the same: USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND imp 14735 0.0 0.0 14140 4828 0 S+ 20:38 0:00.04 gstat imp 14766 1.3 0.0 15772 6256 0 S+ 20:39 0:00.02 gstat-rs So the runtime size is at least in the same ballpark (still larger, but not crazy larger). More CPU too, but that's just a polling artifact I think (other times gstat had some, and gstat-rs didn't). Why is the rust binary so much larger? Are the rust runtime and dependencies statically linked? Warner > > > Currently, it would not be so realistic, but once we completely switch > > to pkgbase, IIUC, programs in base can sanely depemd on ports programs, > > excluding kernel and fundamental libraries. > > > > As non-rust consumers of graphics/librsvg2-rust can sanely link with > > it, I assume kmods in ports written in rust can kldload'ed sanely. > > This could be a good starting point. > > > > And would be not all, but test for rust libraries could be implemented > > with C/C++ or any other language suitable, if the rust libraries can > > sanely linked with test codes. > > Yes, if the Rust library implements a C interface, which most don't. > > > > > Am I wrong? > --00000000000028b509060f6c86b6 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Sat, Jan 20, 2024, 7:20=E2=80=AFPM= Alan Somers <a= somers@freebsd.org> wrote:
O= n Sat, Jan 20, 2024 at 7:06=E2=80=AFPM Tomoaki AOKI <junchoon@dec= .sakura.ne.jp> wrote:
>
> On Sat, 20 Jan 2024 15:31:23 -0700
> Warner Losh <imp@bsdimp.com> wrote:
>
> > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov <= wigneddoom@yandex.ru>
> > wrote:
> >
> > > What about external dependencies?
> > >
> > > = https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L19<= /a>
> > >
https= ://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20
> > >
> > > Is there any plan for which crates we should take into the b= ase system?
> > >
> > > We have had C++ in base for many years, but I don=E2=80=99t = see any good libraries
> > > for CLI, logging, JSON, etc.
> > >
> > >
> > > https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-to= ols
> > >
> > > Where is the support for Freebsd as a primary platform? ARM,= RISC-V,
> > > Power? Should we rewrite devd?
> > >
> > > I think we need to start by providing official repositories = (e.g
> > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git)
> > > for different languages that include stable bindings to the = system API:
> > > - sysctl
> > > - libgeom
> > > - libifconfig
> > > - netgraph
> > > - jail
> > > - etc.
> > >
> > > So that it=E2=80=99s not just some anonymous on crates.io<= /a> that represents these
> > > bindings, but our community.
> > > Officially, with support for a stable ABI for releases, secu= rity patches,
> > > etc.
> > >
> > > After this, it will be possible to think about which compone= nts to include
> > > in the base system.
> > >
> > > I would be glad to see a more modern language than C in the = database, but
> > > I=E2=80=99m afraid that it will be like with C++,
> > > that we will get a couple of daemons and utilities and that= =E2=80=99s all.
> > >
> >
> > These are all good questions that need good answers, though neces= sarily to
> > get started.
> >
> > But the other question that occured to me after my last posting w= as "What
> > about build integration?"
> > How much of the rust automation do we take in vs how much do we d= rive from
> > a future
bsd.rust.mk.
> > I can sketch out bsd.rust.mk (to pick an arbitrary name, = we'd likely need
> > one for what we traditionally
> > think of as libraries (which may or may not map 1:1 onto crates: = we could
> > have c callable libraries
> > written in rust in the future, for example) and one for binaries.=
> > Initially, though, if we go with the
> > 'make rust tests possible' then we'd likely need the = appropriate packages
> > installed for whatever
> > dependencies we'd have in the tests. This would give us a tas= te for what
> > we'd need to do for
> > base, I'd think. Once we had that notion, I can easily see th= ere needing to
> > be some sort of
> > rust bindings for ATF/kyua as one of the first libraries / crates= that
> > would test that aspect of
> > the build system. That all would be up to the people writing the = tests in
> > rust, I'd imagine.
> >
> > While I could jot out the basics of this integration (so one coul= d just add
> > the rust
> > tools to a subdir or subdirs, include the bsd.rust.mk or = whatever and then
> > it would build
> > if rust is enabled, and would emit a warning it was skipped becau= se rust
> > was disabled).
> > We'd find out if this is workable or not and iterate from the= re. But that
> > would also require
> > active participation from the rust advocates to make it a reality= : I can
> > put together the
> > build infrastructure for the disabled case, but likely can't = on my own do
> > the rust enabled
> > case. I'd be happy to work with someone to do that, but I'= ;m not going to be
> > able to do
> > that myself: my need for rust is slight, my knowledge of rust is = weak, etc.
> > Working with
> > someone (or ideally several someones), though it could become rea= lity. So
> > please contact
> > me if you'd like to work on this.
> >
> > Warner
>
> One way to go could be moving programs rewritten with rust to ports. > There are some programs (not in rust, though) moved to ports, like rcs= .

I've already done this with a few, though I didn't delete the C
versions from base.
usr.bin/gstat =3D> sysutils/gstat-rs
tools/regression/fsx =3D> devel/fsx

So
% size `which gstat-rs` `which gstat`=
=C2=A0 =C2=A0 =C2=A0text =C2=A0 =C2=A0 data =C2=A0 bss =C2=A0 =C2=A0 = =C2=A0 dec =C2=A0 =C2=A0 =C2=A0 =C2=A0hex =C2=A0 filename
=C2=A0 2094442= =C2=A0 176472 =C2=A0 568 =C2=A0 2271482 =C2=A0 0x22a8fa =C2=A0 /usr/local/= sbin/gstat-rs
=C2=A0 =C2=A0 19350 =C2=A0 =C2=A0 1180 =C2=A0 =C2=A041 =C2= =A0 =C2=A0 20571 =C2=A0 =C2=A0 0x505b =C2=A0 /usr/sbin/gstat
= % file `which gstat-rs` `which gstat`
/usr/local/sbin/gstat-rs: ELF 64-b= it LSB pie executable, ARM aarch64, version 1 (FreeBSD), dynamically linked= , interpreter /libexec/ld-elf.so.1, FreeBSD-style, stripped
/usr/sbin/gs= tat: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ELF 64-bit LSB pie executable, ARM a= arch64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-el= f.so.1, for FreeBSD 15.0 (1500008), FreeBSD-style, stripped
8:36pm brazo= s:[3826]> ldd `which gstat-rs` `which gstat`
/usr/local/sbin/gstat-rs= :
libgeom.so.5 =3D> /lib/libgeom.so.5 (0x60fd38647000)
libthr.so= .3 =3D> /lib/libthr.so.3 (0x60fd38b57000)
libgcc_s.so.1 =3D> /lib= /libgcc_s.so.1 (0x60fd39af1000)
libc.so.7 =3D> /lib/libc.so.7 (0x60f= d3be6f000)
libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x60fd3a009000)<= br> libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x60fd3a55e000)
/usr/sbin/gs= tat:
libdevstat.so.7 =3D> /lib/libdevstat.so.7 (0x448867cd000)
l= ibgeom.so.5 =3D> /lib/libgeom.so.5 (0x4488710b000)
libedit.so.8 =3D&= gt; /lib/libedit.so.8 (0x44887f8d000)
libtinfow.so.9 =3D> /lib/libti= nfow.so.9 (0x44888aab000)
libncursesw.so.9 =3D> /lib/libncursesw.so.= 9 (0x44889c60000)
libc.so.7 =3D> /lib/libc.so.7 (0x4488aaf4000)
= libkvm.so.7 =3D> /lib/libkvm.so.7 (0x44888f77000)
libbsdxml.so.4 =3D= > /lib/libbsdxml.so.4 (0x4488ba02000)
libsbuf.so.6 =3D> /lib/libs= buf.so.6 (0x4488c68d000)
libelf.so.2 =3D> /lib/libelf.so.2 (0x4488ca= 45000)

So that looks scary, like rust is 100x larg= er binaries...=C2=A0 But at runtime it's about the same:
USER= =C2=A0 =C2=A0PID =C2=A0 %CPU %MEM =C2=A0 VSZ =C2=A0 RSS TT =C2=A0STAT STAR= TED =C2=A0 =C2=A0 =C2=A0 =C2=A0 TIME COMMAND
imp =C2=A0 14735 =C2= =A0 =C2=A00.0 =C2=A00.0 14140 =C2=A04828 =C2=A00 =C2=A0S+ =C2=A0 20:38 =C2= =A0 =C2=A0 =C2=A0 =C2=A00:00.04 gstat
imp =C2=A0 14766 =C2=A0 =C2= =A01.3 =C2=A00.0 15772 =C2=A06256 =C2=A00 =C2=A0S+ =C2=A0 20:39 =C2=A0 =C2= =A0 =C2=A0 =C2=A00:00.02 gstat-rs

So the runtime s= ize is at least in the same ballpark (still larger, but not crazy larger). = More CPU too,
but that's just a polling artifact I think (oth= er times gstat had some, and gstat-rs didn't).

=
Why is the rust binary so much larger? Are the rust runtime and depend= encies statically linked?

Warner

>
> Currently, it would not be so realistic, but once we completely switch=
> to pkgbase, IIUC, programs in base can sanely depemd on ports programs= ,
> excluding kernel and fundamental libraries.
>
> As non-rust consumers of graphics/librsvg2-rust can sanely link with > it, I assume kmods in ports written in rust can kldload'ed sanely.=
> This could be a good starting point.
>
> And would be not all, but test for rust libraries could be implemented=
> with C/C++ or any other language suitable, if the rust libraries can > sanely linked with test codes.

Yes, if the Rust library implements a C interface, which most don't.
>
> Am I wrong?
--00000000000028b509060f6c86b6-- From nobody Sun Jan 21 04:03:39 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THfqH58Tvz58CBm for ; Sun, 21 Jan 2024 04:03:55 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THfqH1Gm2z4TMD for ; Sun, 21 Jan 2024 04:03:55 +0000 (UTC) (envelope-from kostikbel@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: from tom.home (kib@localhost [127.0.0.1] (may be forged)) by kib.kiev.ua (8.17.1/8.17.1) with ESMTP id 40L43d5s093075; Sun, 21 Jan 2024 06:03:42 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 40L43d5s093075 Received: (from kostik@localhost) by tom.home (8.17.1/8.17.1/Submit) id 40L43d1a093074; Sun, 21 Jan 2024 06:03:39 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sun, 21 Jan 2024 06:03:39 +0200 From: Konstantin Belousov To: Warner Losh Cc: FreeBSD Hackers Subject: Re: The Case for Rust (in the base system) Message-ID: References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on tom.home X-Rspamd-Queue-Id: 4THfqH1Gm2z4TMD X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US] On Sat, Jan 20, 2024 at 08:43:53PM -0700, Warner Losh wrote: > On Sat, Jan 20, 2024, 7:20 PM Alan Somers wrote: > > > On Sat, Jan 20, 2024 at 7:06 PM Tomoaki AOKI > > wrote: > > > > > > On Sat, 20 Jan 2024 15:31:23 -0700 > > > Warner Losh wrote: > > > > > > > On Sat, Jan 20, 2024 at 11:45 AM Aleksandr Fedorov < > > wigneddoom@yandex.ru> > > > > wrote: > > > > > > > > > What about external dependencies? > > > > > > > > > > > > https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L19 > > > > > > > https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > > > > > > > > > > Is there any plan for which crates we should take into the base > > system? > > > > > > > > > > We have had C++ in base for many years, but I don’t see any good > > libraries > > > > > for CLI, logging, JSON, etc. > > > > > > > > > > > > > > > > > https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-tools > > > > > > > > > > Where is the support for Freebsd as a primary platform? ARM, RISC-V, > > > > > Power? Should we rewrite devd? > > > > > > > > > > I think we need to start by providing official repositories (e.g > > > > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > > > > > for different languages that include stable bindings to the system > > API: > > > > > - sysctl > > > > > - libgeom > > > > > - libifconfig > > > > > - netgraph > > > > > - jail > > > > > - etc. > > > > > > > > > > So that it’s not just some anonymous on crates.io that represents > > these > > > > > bindings, but our community. > > > > > Officially, with support for a stable ABI for releases, security > > patches, > > > > > etc. > > > > > > > > > > After this, it will be possible to think about which components to > > include > > > > > in the base system. > > > > > > > > > > I would be glad to see a more modern language than C in the > > database, but > > > > > I’m afraid that it will be like with C++, > > > > > that we will get a couple of daemons and utilities and that’s all. > > > > > > > > > > > > > These are all good questions that need good answers, though > > necessarily to > > > > get started. > > > > > > > > But the other question that occured to me after my last posting was > > "What > > > > about build integration?" > > > > How much of the rust automation do we take in vs how much do we drive > > from > > > > a future bsd.rust.mk. > > > > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely > > need > > > > one for what we traditionally > > > > think of as libraries (which may or may not map 1:1 onto crates: we > > could > > > > have c callable libraries > > > > written in rust in the future, for example) and one for binaries. > > > > Initially, though, if we go with the > > > > 'make rust tests possible' then we'd likely need the appropriate > > packages > > > > installed for whatever > > > > dependencies we'd have in the tests. This would give us a taste for > > what > > > > we'd need to do for > > > > base, I'd think. Once we had that notion, I can easily see there > > needing to > > > > be some sort of > > > > rust bindings for ATF/kyua as one of the first libraries / crates that > > > > would test that aspect of > > > > the build system. That all would be up to the people writing the tests > > in > > > > rust, I'd imagine. > > > > > > > > While I could jot out the basics of this integration (so one could > > just add > > > > the rust > > > > tools to a subdir or subdirs, include the bsd.rust.mk or whatever and > > then > > > > it would build > > > > if rust is enabled, and would emit a warning it was skipped because > > rust > > > > was disabled). > > > > We'd find out if this is workable or not and iterate from there. But > > that > > > > would also require > > > > active participation from the rust advocates to make it a reality: I > > can > > > > put together the > > > > build infrastructure for the disabled case, but likely can't on my own > > do > > > > the rust enabled > > > > case. I'd be happy to work with someone to do that, but I'm not going > > to be > > > > able to do > > > > that myself: my need for rust is slight, my knowledge of rust is weak, > > etc. > > > > Working with > > > > someone (or ideally several someones), though it could become reality. > > So > > > > please contact > > > > me if you'd like to work on this. > > > > > > > > Warner > > > > > > One way to go could be moving programs rewritten with rust to ports. > > > There are some programs (not in rust, though) moved to ports, like rcs. > > > > I've already done this with a few, though I didn't delete the C > > versions from base. > > usr.bin/gstat => sysutils/gstat-rs > > tools/regression/fsx => devel/fsx > > > > So > % size `which gstat-rs` `which gstat` > text data bss dec hex filename > 2094442 176472 568 2271482 0x22a8fa /usr/local/sbin/gstat-rs > 19350 1180 41 20571 0x505b /usr/sbin/gstat > % file `which gstat-rs` `which gstat` > /usr/local/sbin/gstat-rs: ELF 64-bit LSB pie executable, ARM aarch64, > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, > FreeBSD-style, stripped > /usr/sbin/gstat: ELF 64-bit LSB pie executable, ARM aarch64, > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, > for FreeBSD 15.0 (1500008), FreeBSD-style, stripped > 8:36pm brazos:[3826]> ldd `which gstat-rs` `which gstat` > /usr/local/sbin/gstat-rs: > libgeom.so.5 => /lib/libgeom.so.5 (0x60fd38647000) > libthr.so.3 => /lib/libthr.so.3 (0x60fd38b57000) > libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x60fd39af1000) > libc.so.7 => /lib/libc.so.7 (0x60fd3be6f000) > libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x60fd3a009000) > libsbuf.so.6 => /lib/libsbuf.so.6 (0x60fd3a55e000) > /usr/sbin/gstat: > libdevstat.so.7 => /lib/libdevstat.so.7 (0x448867cd000) > libgeom.so.5 => /lib/libgeom.so.5 (0x4488710b000) > libedit.so.8 => /lib/libedit.so.8 (0x44887f8d000) > libtinfow.so.9 => /lib/libtinfow.so.9 (0x44888aab000) > libncursesw.so.9 => /lib/libncursesw.so.9 (0x44889c60000) > libc.so.7 => /lib/libc.so.7 (0x4488aaf4000) > libkvm.so.7 => /lib/libkvm.so.7 (0x44888f77000) > libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x4488ba02000) > libsbuf.so.6 => /lib/libsbuf.so.6 (0x4488c68d000) > libelf.so.2 => /lib/libelf.so.2 (0x4488ca45000) > > So that looks scary, like rust is 100x larger binaries... But at runtime > it's about the same: > USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND > imp 14735 0.0 0.0 14140 4828 0 S+ 20:38 0:00.04 gstat > imp 14766 1.3 0.0 15772 6256 0 S+ 20:39 0:00.02 gstat-rs > > So the runtime size is at least in the same ballpark (still larger, but not > crazy larger). More CPU too, > but that's just a polling artifact I think (other times gstat had some, and > gstat-rs didn't). > > Why is the rust binary so much larger? Are the rust runtime and > dependencies statically linked? Simple answer is yes. More complete answer is that nobody, practically speaking, writes a program in Rust + standard library. It is always several dozens of crates that are often indeed useful, and which bring up their own dependencies. All of that stuff is statically linked into the binary, remember that Rust does not have stable ABI. For some parts of the language, like async, you must use huge external dependencies, importing which into the base system is not practical (I do not mean a compiler, which seems to be already agreed not to). Also Rust-generated code seems to be fatter than corresponding C, not least because value-passing is much more common in Rust. Looking at disassembly the dominating theme are memory moves. From nobody Sun Jan 21 04:14:59 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THg4L1lCnz58CpN for ; Sun, 21 Jan 2024 04:15:14 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-qk1-f174.google.com (mail-qk1-f174.google.com [209.85.222.174]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THg4K69j5z4WKD; Sun, 21 Jan 2024 04:15:13 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-qk1-f174.google.com with SMTP id af79cd13be357-78314e00350so192193085a.1; Sat, 20 Jan 2024 20:15:13 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705810512; x=1706415312; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=L2w+Y5PG0jW4/tfVHuQOjPnqRy9+qz6J9I3/mG5Q/mo=; b=Vy6lACdoFavJdUmWQiynTlhwSmaTLflvv+hKUHAfC+SSCqzIEZvjsQhrf8Dc7L1NhG GCpIsLscqjWFSinVOQG4yg0sb8f24EsVsrID1WNYf4dzn6Vpabyk0vcCpa5MiN7r/gdn ac153FI8O358l3/LgXgFcR+7vErr9u6xfzxd9zjCQza6zn20IugS+qB4KBlR1G4cC6sU 7uACdEO/qb6NNeH6ktJbuGltEVwTzMgul3q+e3JxRZVtFKjUQOxgqzZ0sQXfIHpJc2r/ 3UctUY+Hrg+4F9pzAKskCZiENHNOjoJy9cZI9IjV66B/FXgQ9A/Uv6+HBNi4cFaFr2d5 ms1Q== X-Gm-Message-State: AOJu0YxUa3cb2bciem7O10tSF3WtaXcFYhYZu3doNzo9zGmB/Cp0cR8o Vmb0TY7z2qtNKFrXqEqYbwESJ+2qoydJ0jZRQoMUto151ISn3hcNCNVrB/SrV34emMY8DrNzlYO jRq73PdV1i9UO6kmpKmDY04JBu1AzQcn8 X-Google-Smtp-Source: AGHT+IHM6oE4zzr7zLmj8q/pf1jSgaeY092NL7eEoYXgmcvijuxX3BiOn0rcjof0ixkjomLe2K7REFWJVm2TegiADLI= X-Received: by 2002:a05:620a:6117:b0:783:3d1f:94e6 with SMTP id oq23-20020a05620a611700b007833d1f94e6mr2637174qkn.135.1705810511820; Sat, 20 Jan 2024 20:15:11 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> In-Reply-To: From: Alan Somers Date: Sat, 20 Jan 2024 21:14:59 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Warner Losh Cc: Alan Somers , Tomoaki AOKI , Aleksandr Fedorov , FreeBSD Hackers , Scott Long , "Goran Meki??" Content-Type: multipart/alternative; boundary="0000000000009c7c2c060f6cf5db" X-Rspamd-Queue-Id: 4THg4K69j5z4WKD X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] --0000000000009c7c2c060f6cf5db Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, Jan 20, 2024, 8:44=E2=80=AFPM Warner Losh wrote: > > > On Sat, Jan 20, 2024, 7:20=E2=80=AFPM Alan Somers w= rote: > >> On Sat, Jan 20, 2024 at 7:06=E2=80=AFPM Tomoaki AOKI >> wrote: >> > >> > On Sat, 20 Jan 2024 15:31:23 -0700 >> > Warner Losh wrote: >> > >> > > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov < >> wigneddoom@yandex.ru> >> > > wrote: >> > > >> > > > What about external dependencies? >> > > > >> > > > >> https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L= 19 >> > > > >> https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 >> > > > >> > > > Is there any plan for which crates we should take into the base >> system? >> > > > >> > > > We have had C++ in base for many years, but I don=E2=80=99t see an= y good >> libraries >> > > > for CLI, logging, JSON, etc. >> > > > >> > > > >> > > > >> https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-t= ools >> > > > >> > > > Where is the support for Freebsd as a primary platform? ARM, RISC-= V, >> > > > Power? Should we rewrite devd? >> > > > >> > > > I think we need to start by providing official repositories (e.g >> > > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) >> > > > for different languages that include stable bindings to the system >> API: >> > > > - sysctl >> > > > - libgeom >> > > > - libifconfig >> > > > - netgraph >> > > > - jail >> > > > - etc. >> > > > >> > > > So that it=E2=80=99s not just some anonymous on crates.io that rep= resents >> these >> > > > bindings, but our community. >> > > > Officially, with support for a stable ABI for releases, security >> patches, >> > > > etc. >> > > > >> > > > After this, it will be possible to think about which components to >> include >> > > > in the base system. >> > > > >> > > > I would be glad to see a more modern language than C in the >> database, but >> > > > I=E2=80=99m afraid that it will be like with C++, >> > > > that we will get a couple of daemons and utilities and that=E2=80= =99s all. >> > > > >> > > >> > > These are all good questions that need good answers, though >> necessarily to >> > > get started. >> > > >> > > But the other question that occured to me after my last posting was >> "What >> > > about build integration?" >> > > How much of the rust automation do we take in vs how much do we driv= e >> from >> > > a future bsd.rust.mk. >> > > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely >> need >> > > one for what we traditionally >> > > think of as libraries (which may or may not map 1:1 onto crates: we >> could >> > > have c callable libraries >> > > written in rust in the future, for example) and one for binaries. >> > > Initially, though, if we go with the >> > > 'make rust tests possible' then we'd likely need the appropriate >> packages >> > > installed for whatever >> > > dependencies we'd have in the tests. This would give us a taste for >> what >> > > we'd need to do for >> > > base, I'd think. Once we had that notion, I can easily see there >> needing to >> > > be some sort of >> > > rust bindings for ATF/kyua as one of the first libraries / crates th= at >> > > would test that aspect of >> > > the build system. That all would be up to the people writing the >> tests in >> > > rust, I'd imagine. >> > > >> > > While I could jot out the basics of this integration (so one could >> just add >> > > the rust >> > > tools to a subdir or subdirs, include the bsd.rust.mk or whatever >> and then >> > > it would build >> > > if rust is enabled, and would emit a warning it was skipped because >> rust >> > > was disabled). >> > > We'd find out if this is workable or not and iterate from there. But >> that >> > > would also require >> > > active participation from the rust advocates to make it a reality: I >> can >> > > put together the >> > > build infrastructure for the disabled case, but likely can't on my >> own do >> > > the rust enabled >> > > case. I'd be happy to work with someone to do that, but I'm not goin= g >> to be >> > > able to do >> > > that myself: my need for rust is slight, my knowledge of rust is >> weak, etc. >> > > Working with >> > > someone (or ideally several someones), though it could become >> reality. So >> > > please contact >> > > me if you'd like to work on this. >> > > >> > > Warner >> > >> > One way to go could be moving programs rewritten with rust to ports. >> > There are some programs (not in rust, though) moved to ports, like rcs= . >> >> I've already done this with a few, though I didn't delete the C >> versions from base. >> usr.bin/gstat =3D> sysutils/gstat-rs >> tools/regression/fsx =3D> devel/fsx >> > > So > % size `which gstat-rs` `which gstat` > text data bss dec hex filename > 2094442 176472 568 2271482 0x22a8fa /usr/local/sbin/gstat-rs > 19350 1180 41 20571 0x505b /usr/sbin/gstat > % file `which gstat-rs` `which gstat` > /usr/local/sbin/gstat-rs: ELF 64-bit LSB pie executable, ARM aarch64, > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1= , > FreeBSD-style, stripped > /usr/sbin/gstat: ELF 64-bit LSB pie executable, ARM aarch64, > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1= , > for FreeBSD 15.0 (1500008), FreeBSD-style, stripped > 8:36pm brazos:[3826]> ldd `which gstat-rs` `which gstat` > /usr/local/sbin/gstat-rs: > libgeom.so.5 =3D> /lib/libgeom.so.5 (0x60fd38647000) > libthr.so.3 =3D> /lib/libthr.so.3 (0x60fd38b57000) > libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x60fd39af1000) > libc.so.7 =3D> /lib/libc.so.7 (0x60fd3be6f000) > libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x60fd3a009000) > libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x60fd3a55e000) > /usr/sbin/gstat: > libdevstat.so.7 =3D> /lib/libdevstat.so.7 (0x448867cd000) > libgeom.so.5 =3D> /lib/libgeom.so.5 (0x4488710b000) > libedit.so.8 =3D> /lib/libedit.so.8 (0x44887f8d000) > libtinfow.so.9 =3D> /lib/libtinfow.so.9 (0x44888aab000) > libncursesw.so.9 =3D> /lib/libncursesw.so.9 (0x44889c60000) > libc.so.7 =3D> /lib/libc.so.7 (0x4488aaf4000) > libkvm.so.7 =3D> /lib/libkvm.so.7 (0x44888f77000) > libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x4488ba02000) > libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x4488c68d000) > libelf.so.2 =3D> /lib/libelf.so.2 (0x4488ca45000) > > So that looks scary, like rust is 100x larger binaries... But at runtime > it's about the same: > USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND > imp 14735 0.0 0.0 14140 4828 0 S+ 20:38 0:00.04 gstat > imp 14766 1.3 0.0 15772 6256 0 S+ 20:39 0:00.02 gstat-r= s > > So the runtime size is at least in the same ballpark (still larger, but > not crazy larger). More CPU too, > but that's just a polling artifact I think (other times gstat had some, > and gstat-rs didn't). > > Why is the rust binary so much larger? Are the rust runtime and > dependencies statically linked? > Yes, that's a large part of it. Rust libraries are usually statically linked (though they don't have to be). For example, in the output above, notice that gstat-rs does not link to ncurses. That's because the equivalent library is statically linked in instead. Also, rust programs by default include goodies like stack unwinding on panic, which takes extra code too. But that can be turned off if you really want to save space. -Alan > --0000000000009c7c2c060f6cf5db Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sat, Jan 20, 2024, 8:44=E2=80=AFPM Warner = Losh <imp@bsdimp.com> wrote:
=


=
On Sat, Jan 20, 2024, 7:20=E2=80=AFPM= Alan Somers <asomers@freebsd.org> wrote:
On Sat, Jan 20, 2024 at 7:06=E2=80=AFPM Tomoak= i AOKI <junchoon@dec.sakura.ne.jp> w= rote:
>
> On Sat, 20 Jan 2024 15:31:23 -0700
> Warner Losh <imp@bsdimp.com> wrote:
>
> > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov <wigneddoom@yandex.ru>
> > wrote:
> >
> > > What about external dependencies?
> > >
> > > https://github.com/Axcient/freebsd-nfs-exporter/blob/= master/Cargo.toml#L19
> > > https://github.com/asomers/gstat-rs/blob/master/gstat/src/= main.rs#L20
> > >
> > > Is there any plan for which crates we should take into the b= ase system?
> > >
> > > We have had C++ in base for many years, but I don=E2=80=99t = see any good libraries
> > > for CLI, logging, JSON, etc.
> > >
> > >
> > > https://doc.rust-lang.org/rustc/platform-support.ht= ml#tier-1-with-host-tools
> > >
> > > Where is the support for Freebsd as a primary platform? ARM,= RISC-V,
> > > Power? Should we rewrite devd?
> > >
> > > I think we need to start by providing official repositories = (e.g
> > > git.FreeBSD.org/rust.= git or git.FreeBSD.org/go.git)=
> > > for different languages that include stable bindings to the = system API:
> > > - sysctl
> > > - libgeom
> > > - libifconfig
> > > - netgraph
> > > - jail
> > > - etc.
> > >
> > > So that it=E2=80=99s not just some anonymous on crates.io that represents these
> > > bindings, but our community.
> > > Officially, with support for a stable ABI for releases, secu= rity patches,
> > > etc.
> > >
> > > After this, it will be possible to think about which compone= nts to include
> > > in the base system.
> > >
> > > I would be glad to see a more modern language than C in the = database, but
> > > I=E2=80=99m afraid that it will be like with C++,
> > > that we will get a couple of daemons and utilities and that= =E2=80=99s all.
> > >
> >
> > These are all good questions that need good answers, though neces= sarily to
> > get started.
> >
> > But the other question that occured to me after my last posting w= as "What
> > about build integration?"
> > How much of the rust automation do we take in vs how much do we d= rive from
> > a future bsd.rust.mk.
> > I can sketch out bsd.rust.mk (to pi= ck an arbitrary name, we'd likely need
> > one for what we traditionally
> > think of as libraries (which may or may not map 1:1 onto crates: = we could
> > have c callable libraries
> > written in rust in the future, for example) and one for binaries.=
> > Initially, though, if we go with the
> > 'make rust tests possible' then we'd likely need the = appropriate packages
> > installed for whatever
> > dependencies we'd have in the tests. This would give us a tas= te for what
> > we'd need to do for
> > base, I'd think. Once we had that notion, I can easily see th= ere needing to
> > be some sort of
> > rust bindings for ATF/kyua as one of the first libraries / crates= that
> > would test that aspect of
> > the build system. That all would be up to the people writing the = tests in
> > rust, I'd imagine.
> >
> > While I could jot out the basics of this integration (so one coul= d just add
> > the rust
> > tools to a subdir or subdirs, include the bsd.rust.mk or whatever and then
> > it would build
> > if rust is enabled, and would emit a warning it was skipped becau= se rust
> > was disabled).
> > We'd find out if this is workable or not and iterate from the= re. But that
> > would also require
> > active participation from the rust advocates to make it a reality= : I can
> > put together the
> > build infrastructure for the disabled case, but likely can't = on my own do
> > the rust enabled
> > case. I'd be happy to work with someone to do that, but I'= ;m not going to be
> > able to do
> > that myself: my need for rust is slight, my knowledge of rust is = weak, etc.
> > Working with
> > someone (or ideally several someones), though it could become rea= lity. So
> > please contact
> > me if you'd like to work on this.
> >
> > Warner
>
> One way to go could be moving programs rewritten with rust to ports. > There are some programs (not in rust, though) moved to ports, like rcs= .

I've already done this with a few, though I didn't delete the C
versions from base.
usr.bin/gstat =3D> sysutils/gstat-rs
tools/regression/fsx =3D> devel/fsx

So
% size `which gstat-rs` `which gstat`=
=C2=A0 =C2=A0 =C2=A0text =C2=A0 =C2=A0 data =C2=A0 bss =C2=A0 =C2=A0 = =C2=A0 dec =C2=A0 =C2=A0 =C2=A0 =C2=A0hex =C2=A0 filename
=C2=A0 2094442= =C2=A0 176472 =C2=A0 568 =C2=A0 2271482 =C2=A0 0x22a8fa =C2=A0 /usr/local/= sbin/gstat-rs
=C2=A0 =C2=A0 19350 =C2=A0 =C2=A0 1180 =C2=A0 =C2=A041 =C2= =A0 =C2=A0 20571 =C2=A0 =C2=A0 0x505b =C2=A0 /usr/sbin/gstat
= % file `which gstat-rs` `which gstat`
/usr/local/sbin/gstat-rs: ELF 64-b= it LSB pie executable, ARM aarch64, version 1 (FreeBSD), dynamically linked= , interpreter /libexec/ld-elf.so.1, FreeBSD-style, stripped
/usr/sbin/gs= tat: =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ELF 64-bit LSB pie executable, ARM a= arch64, version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-el= f.so.1, for FreeBSD 15.0 (1500008), FreeBSD-style, stripped
8:36pm brazo= s:[3826]> ldd `which gstat-rs` `which gstat`
/usr/local/sbin/gstat-rs= :
libgeom.so.5 =3D> /lib/libgeom.so.5 (0x60fd38647000)
libthr.so= .3 =3D> /lib/libthr.so.3 (0x60fd38b57000)
libgcc_s.so.1 =3D> /lib= /libgcc_s.so.1 (0x60fd39af1000)
libc.so.7 =3D> /lib/libc.so.7 (0x60f= d3be6f000)
libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x60fd3a009000)<= br> libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x60fd3a55e000)
/usr/sbin/gs= tat:
libdevstat.so.7 =3D> /lib/libdevstat.so.7 (0x448867cd000)
l= ibgeom.so.5 =3D> /lib/libgeom.so.5 (0x4488710b000)
libedit.so.8 =3D&= gt; /lib/libedit.so.8 (0x44887f8d000)
libtinfow.so.9 =3D> /lib/libti= nfow.so.9 (0x44888aab000)
libncursesw.so.9 =3D> /lib/libncursesw.so.= 9 (0x44889c60000)
libc.so.7 =3D> /lib/libc.so.7 (0x4488aaf4000)
= libkvm.so.7 =3D> /lib/libkvm.so.7 (0x44888f77000)
libbsdxml.so.4 =3D= > /lib/libbsdxml.so.4 (0x4488ba02000)
libsbuf.so.6 =3D> /lib/libs= buf.so.6 (0x4488c68d000)
libelf.so.2 =3D> /lib/libelf.so.2 (0x4488ca= 45000)

So that looks scary, like rust is 100x larg= er binaries...=C2=A0 But at runtime it's about the same:
USER= =C2=A0 =C2=A0PID =C2=A0 %CPU %MEM =C2=A0 VSZ =C2=A0 RSS TT =C2=A0STAT STAR= TED =C2=A0 =C2=A0 =C2=A0 =C2=A0 TIME COMMAND
imp =C2=A0 14735 =C2= =A0 =C2=A00.0 =C2=A00.0 14140 =C2=A04828 =C2=A00 =C2=A0S+ =C2=A0 20:38 =C2= =A0 =C2=A0 =C2=A0 =C2=A00:00.04 gstat
imp =C2=A0 14766 =C2=A0 =C2= =A01.3 =C2=A00.0 15772 =C2=A06256 =C2=A00 =C2=A0S+ =C2=A0 20:39 =C2=A0 =C2= =A0 =C2=A0 =C2=A00:00.02 gstat-rs

So the runtime s= ize is at least in the same ballpark (still larger, but not crazy larger). = More CPU too,
but that's just a polling artifact I think (oth= er times gstat had some, and gstat-rs didn't).

=
Why is the rust binary so much larger? Are the rust runtime and depend= encies statically linked?

Yes, that's a large part of it. Rust l= ibraries are usually statically linked (though they don't have to be). = For example, in the output above, notice that gstat-rs does not link to ncu= rses. That's because the equivalent library is statically linked in ins= tead. Also, rust programs by default include goodies like stack unwinding o= n panic, which takes extra code too. But that can be turned off if you real= ly want to save space.=C2=A0
-Alan
--0000000000009c7c2c060f6cf5db-- From nobody Sun Jan 21 04:24:49 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THgHR1PKGz58Dk7 for ; Sun, 21 Jan 2024 04:24:51 +0000 (UTC) (envelope-from vishwin@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THgHR0tfZz4XgM; Sun, 21 Jan 2024 04:24:51 +0000 (UTC) (envelope-from vishwin@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705811091; h=from:from: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:autocrypt:autocrypt; bh=WCCOOA8j0L5cnG0lBm1Q5S5H7fv/HIzHseVQOZCVQv8=; b=nOlm4UPQfxLkIl9HK83xWQvX0zIoqQ1N0sbE1gqdkn2QtSELrmeTe28o3CQNIOcVM+ZLHw jb8u9Pv6bMkurwfd9WGvZzLKeWCl/j9B9LiXUDBIODeB9SWlHEM1v8exFr1ukKFI3pJXrb aPDQC7PNfSzpKgwA8dY00zVMd7TZfHZQ9tTZLOJoR4Wq9rlQjA9Vsh2PDkUTADciVlVy5V 2AtN7p3LhKA8G0qgPGxjtXy0cwOLXN1MNH5XjzfSOYFYWL0ZTJXTMYjRLGqfBNuWc1+aJh 3YzIe2gAvQgFjNz1EF5IhK+7RC/Y9Z6P6eFtyOI1v+Z17zmNKHS3rOebsmRfXA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705811091; h=from:from: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:autocrypt:autocrypt; bh=WCCOOA8j0L5cnG0lBm1Q5S5H7fv/HIzHseVQOZCVQv8=; b=GCcDDqFm8fgKIdr2HNM+XCKa8MM9zoEoDQ96XqZjvsQPxC3VqzUSDmcRs4KR6Qe2LP1UG8 4yxPhpdijfwjakz56R3YYUMqzeD4hn6LxzzVacjp81EpoOOSv871qLQnJIkkP2H7D22gtE syHG6lyNnFxXiaecvIWyZEWg23OCCFxg8QpSVSaMTn1BCh4wK0v+QrSB8mOPQ9Y7RqLuZy 2V3z4Ji4B0tNTOyTpW0l1hXZKkCtykVDw2I6CZ+hzc/gRivBNzAbNNCHRA+QFXSF0GbZF/ pHHMvR5p6BtIJg1vk/Mm6qZ8w8eSlU0bWvgncrLOCSHVR+f6pUu3LrBT4JriTg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705811091; a=rsa-sha256; cv=none; b=FvFm2vQc3F6ZWKtRpZpvizpE1R1ZJzV2yTfkIReC8WzTwylKs1z78p3YYZBcHRW58MZEa7 6QgvPFopz1jBATLE/hTX5lNEpcQEoRKNYUm5TnHVRF7y1uRjL+r7M9qlQ2RqzSyEwZNQOL 4oLtYUPmyWXAxZAQijtUG9eUYndiUaeqRzWMcP5OveMh1U3CoOba4nPJgykg30NFDbs1cc HEmTwxDM4J6KT9VhVaahJ/iQtGUaDGUpS2A2Mof8yDrvFSNrXs4Ix178ci9tHaMfE7S4dx 9Qbtbp6IZbanhxZj4ec5B2W7VTzCdDmgBqQNk/D4azWGL94AbSCcseBpuce2hw== Received: from [IPV6:2601:98a:d80:d0:56ee:75ff:fe50:69b5] (unknown [IPv6:2601:98a:d80:d0:56ee:75ff:fe50:69b5]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: vishwin/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4THgHQ4fFpz1B4q; Sun, 21 Jan 2024 04:24:50 +0000 (UTC) (envelope-from vishwin@freebsd.org) Message-ID: <901249e1-1ced-4b68-9f75-fbfc9dc412fc@freebsd.org> Date: Sat, 20 Jan 2024 23:24:49 -0500 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Case for Rust (in the base system) Content-Language: en-GB To: Warner Losh , Alan Somers Cc: Tomoaki AOKI , Aleksandr Fedorov , FreeBSD Hackers , Scott Long , Goran Meki?? References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> From: Charlie Li Autocrypt: addr=vishwin@freebsd.org; keydata= xjMEZFWWqBYJKwYBBAHaRw8BAQdAINFDmM+bgGkT1C4nD5a3BxgcH8Xnx5qTJbPuIBxD57LN MkNoYXJsaWUgTGkgKEZyZWVCU0QgUHJvamVjdCkgPHZpc2h3aW5ARnJlZUJTRC5vcmc+wpkE ExYKAEEWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZFWWqAIbAwUJA+3ogAULCQgHAgIiAgYV CgkICwIEFgIDAQIeBwIXgAAKCRBnj5NgWEFcyllaAP9CGICFEvTUOv5BYh/H8m49VJ87a/wd 0obeQfVBnS464AD9FopTHbjEs0HDV0ZYmJPxzJIznjumsj9gBxX0bBqqTgzOOARkVZaoEgor BgEEAZdVAQUBAQdA6BUWuG5RuT0vmtoDyCUUqiJGdtd78GM5ic3kw2AntSADAQgHwn4EGBYK ACYWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZFWWqAIbDAUJA+3ogAAKCRBnj5NgWEFcyn55 AP9ezKDCUgHqAq6JX976abb9pYdbSjxxNJqnrjgNkfhgIQD/QhR+fgnUHhcGTMBy+pYHZUGH 5DCuITsK1U4+v252uws= Organization: FreeBSD Project In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------mv0R0aqyazbDki0OAQVnHx9s" This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------mv0R0aqyazbDki0OAQVnHx9s Content-Type: multipart/mixed; boundary="------------08AGZtzqAOpxPoo6JDO6tZaD"; protected-headers="v1" From: Charlie Li To: Warner Losh , Alan Somers Cc: Tomoaki AOKI , Aleksandr Fedorov , FreeBSD Hackers , Scott Long , Goran Meki?? Message-ID: <901249e1-1ced-4b68-9f75-fbfc9dc412fc@freebsd.org> Subject: Re: The Case for Rust (in the base system) References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> In-Reply-To: --------------08AGZtzqAOpxPoo6JDO6tZaD Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 V2FybmVyIExvc2ggd3JvdGU6DQo+IFdoeSBpcyB0aGUgcnVzdCBiaW5hcnkgc28gbXVjaCBs YXJnZXI/IEFyZSB0aGUgcnVzdCBydW50aW1lIGFuZCANCj4gZGVwZW5kZW5jaWVzIHN0YXRp Y2FsbHkgbGlua2VkPw0KPiANCnRsO2RyIHllczogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9y Zy9yZWZlcmVuY2UvbGlua2FnZS5odG1sDQoNCkF0IGxlYXN0IGluIHBvcnRzLCB3ZSdyZSBn ZW5lcmFsbHkgbm90IHBhY2thZ2luZyBhbnl0aGluZyBvdGhlciB0aGFuIA0KLS1jcmF0ZS10 eXBlPWJpbiAoZXhlY3V0YWJsZSkuIEluZGl2aWR1YWwgY3JhdGVzIGFyZSBmcmVlIHRvIHNl dCBvdXRwdXQgDQpjcmF0ZSB0eXBlcywgZXNwZWNpYWxseSB3aGVuIHByb2R1Y2luZyBhbiBl eGVjdXRhYmxlLCBidXQgbW9zdCB3aWxsIA0KbGVhdmUgdGhlIGNyYXRlX3R5cGUgYXR0cmli dXRlIHVuc3BlY2lmaWVkIGluIENhcmdvLnRvbWwgdG8gbGV0IA0KcnVzdGMvY2FyZ28gcGVy Zm9ybSB0aGUgbW9zdCBhcHByb3ByaWF0ZSBhY3Rpb25zLiBJbiB0aGlzIGNhc2UsIGEgc2Vy aWVzIA0Kb2YgcmxpYnMgYXJlIHByb2R1Y2VkIGZvciB0aGUgZmluYWwgbGluayBpbnRvIGFu IGV4ZWN1dGFibGUuDQoNClNvbWVvbmUgZGlkIHVwIGFuIGV4cGxhaW5lciBvbiBzaXplIG1p bmltaXNhdGlvbjogDQpodHRwczovL2dpdGh1Yi5jb20vam9obnRoYWdlbi9taW4tc2l6ZWQt cnVzdA0KDQpJbiBwb3J0cywgd2UgYWxyZWFkeSB1c2UgdGhlIFJlbGVhc2UgcHJvZmlsZSwg c3RyaXAgc3ltYm9scywgZW5hYmxlIExUTyANCndoZW4gbm90IHVuc2FmZSBhbmQgc2V0IHRo ZSBSdXN0IGVxdWl2YWxlbnQgb2YgLU8yIChkZWZhdWx0IGluIFJlbGVhc2UgDQpwcm9maWxl IGlzIC1PMykuDQoNCi0tIA0KQ2hhcmxpZSBMaQ0KLi4ubm9wZSwgc3RpbGwgZG9uJ3QgaGF2 ZSBhbiBleGl0IGxpbmUuDQoNCg== --------------08AGZtzqAOpxPoo6JDO6tZaD-- --------------mv0R0aqyazbDki0OAQVnHx9s Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQRTQA7vBfo8y1zE1rpnj5NgWEFcygUCZayckQUDAAAAAAAKCRBnj5NgWEFcykzw AQDQl7NMdsVnaZPE1YLChThFCUolWUxamoUBXiJrqS/g2AEAinge9eqLgbk6+Uh73AQMsbRqQdZv JCMvH0pIQHe2IAs= =kwiQ -----END PGP SIGNATURE----- --------------mv0R0aqyazbDki0OAQVnHx9s-- From nobody Sun Jan 21 04:34:26 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THgVf3mggz58FWb for ; Sun, 21 Jan 2024 04:34:34 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THgVf22Vjz4Z8d; Sun, 21 Jan 2024 04:34:34 +0000 (UTC) (envelope-from kostikbel@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: from tom.home (kib@localhost [127.0.0.1] (may be forged)) by kib.kiev.ua (8.17.1/8.17.1) with ESMTP id 40L4YQmS000596; Sun, 21 Jan 2024 06:34:30 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 40L4YQmS000596 Received: (from kostik@localhost) by tom.home (8.17.1/8.17.1/Submit) id 40L4YQTh000594; Sun, 21 Jan 2024 06:34:26 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sun, 21 Jan 2024 06:34:26 +0200 From: Konstantin Belousov To: Alan Somers Cc: FreeBSD Hackers Subject: Re: The Case for Rust (in the base system) Message-ID: References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on tom.home X-Rspamd-Queue-Id: 4THgVf22Vjz4Z8d X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US] On Sat, Jan 20, 2024 at 09:14:59PM -0700, Alan Somers wrote: > On Sat, Jan 20, 2024, 8:44 PM Warner Losh wrote: > > > > > > > On Sat, Jan 20, 2024, 7:20 PM Alan Somers wrote: > > > >> On Sat, Jan 20, 2024 at 7:06 PM Tomoaki AOKI > >> wrote: > >> > > >> > On Sat, 20 Jan 2024 15:31:23 -0700 > >> > Warner Losh wrote: > >> > > >> > > On Sat, Jan 20, 2024 at 11:45 AM Aleksandr Fedorov < > >> wigneddoom@yandex.ru> > >> > > wrote: > >> > > > >> > > > What about external dependencies? > >> > > > > >> > > > > >> https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L19 > >> > > > > >> https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > >> > > > > >> > > > Is there any plan for which crates we should take into the base > >> system? > >> > > > > >> > > > We have had C++ in base for many years, but I don’t see any good > >> libraries > >> > > > for CLI, logging, JSON, etc. > >> > > > > >> > > > > >> > > > > >> https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-tools > >> > > > > >> > > > Where is the support for Freebsd as a primary platform? ARM, RISC-V, > >> > > > Power? Should we rewrite devd? > >> > > > > >> > > > I think we need to start by providing official repositories (e.g > >> > > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > >> > > > for different languages that include stable bindings to the system > >> API: > >> > > > - sysctl > >> > > > - libgeom > >> > > > - libifconfig > >> > > > - netgraph > >> > > > - jail > >> > > > - etc. > >> > > > > >> > > > So that it’s not just some anonymous on crates.io that represents > >> these > >> > > > bindings, but our community. > >> > > > Officially, with support for a stable ABI for releases, security > >> patches, > >> > > > etc. > >> > > > > >> > > > After this, it will be possible to think about which components to > >> include > >> > > > in the base system. > >> > > > > >> > > > I would be glad to see a more modern language than C in the > >> database, but > >> > > > I’m afraid that it will be like with C++, > >> > > > that we will get a couple of daemons and utilities and that’s all. > >> > > > > >> > > > >> > > These are all good questions that need good answers, though > >> necessarily to > >> > > get started. > >> > > > >> > > But the other question that occured to me after my last posting was > >> "What > >> > > about build integration?" > >> > > How much of the rust automation do we take in vs how much do we drive > >> from > >> > > a future bsd.rust.mk. > >> > > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely > >> need > >> > > one for what we traditionally > >> > > think of as libraries (which may or may not map 1:1 onto crates: we > >> could > >> > > have c callable libraries > >> > > written in rust in the future, for example) and one for binaries. > >> > > Initially, though, if we go with the > >> > > 'make rust tests possible' then we'd likely need the appropriate > >> packages > >> > > installed for whatever > >> > > dependencies we'd have in the tests. This would give us a taste for > >> what > >> > > we'd need to do for > >> > > base, I'd think. Once we had that notion, I can easily see there > >> needing to > >> > > be some sort of > >> > > rust bindings for ATF/kyua as one of the first libraries / crates that > >> > > would test that aspect of > >> > > the build system. That all would be up to the people writing the > >> tests in > >> > > rust, I'd imagine. > >> > > > >> > > While I could jot out the basics of this integration (so one could > >> just add > >> > > the rust > >> > > tools to a subdir or subdirs, include the bsd.rust.mk or whatever > >> and then > >> > > it would build > >> > > if rust is enabled, and would emit a warning it was skipped because > >> rust > >> > > was disabled). > >> > > We'd find out if this is workable or not and iterate from there. But > >> that > >> > > would also require > >> > > active participation from the rust advocates to make it a reality: I > >> can > >> > > put together the > >> > > build infrastructure for the disabled case, but likely can't on my > >> own do > >> > > the rust enabled > >> > > case. I'd be happy to work with someone to do that, but I'm not going > >> to be > >> > > able to do > >> > > that myself: my need for rust is slight, my knowledge of rust is > >> weak, etc. > >> > > Working with > >> > > someone (or ideally several someones), though it could become > >> reality. So > >> > > please contact > >> > > me if you'd like to work on this. > >> > > > >> > > Warner > >> > > >> > One way to go could be moving programs rewritten with rust to ports. > >> > There are some programs (not in rust, though) moved to ports, like rcs. > >> > >> I've already done this with a few, though I didn't delete the C > >> versions from base. > >> usr.bin/gstat => sysutils/gstat-rs > >> tools/regression/fsx => devel/fsx > >> > > > > So > > % size `which gstat-rs` `which gstat` > > text data bss dec hex filename > > 2094442 176472 568 2271482 0x22a8fa /usr/local/sbin/gstat-rs > > 19350 1180 41 20571 0x505b /usr/sbin/gstat > > % file `which gstat-rs` `which gstat` > > /usr/local/sbin/gstat-rs: ELF 64-bit LSB pie executable, ARM aarch64, > > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, > > FreeBSD-style, stripped > > /usr/sbin/gstat: ELF 64-bit LSB pie executable, ARM aarch64, > > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, > > for FreeBSD 15.0 (1500008), FreeBSD-style, stripped > > 8:36pm brazos:[3826]> ldd `which gstat-rs` `which gstat` > > /usr/local/sbin/gstat-rs: > > libgeom.so.5 => /lib/libgeom.so.5 (0x60fd38647000) > > libthr.so.3 => /lib/libthr.so.3 (0x60fd38b57000) > > libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x60fd39af1000) > > libc.so.7 => /lib/libc.so.7 (0x60fd3be6f000) > > libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x60fd3a009000) > > libsbuf.so.6 => /lib/libsbuf.so.6 (0x60fd3a55e000) > > /usr/sbin/gstat: > > libdevstat.so.7 => /lib/libdevstat.so.7 (0x448867cd000) > > libgeom.so.5 => /lib/libgeom.so.5 (0x4488710b000) > > libedit.so.8 => /lib/libedit.so.8 (0x44887f8d000) > > libtinfow.so.9 => /lib/libtinfow.so.9 (0x44888aab000) > > libncursesw.so.9 => /lib/libncursesw.so.9 (0x44889c60000) > > libc.so.7 => /lib/libc.so.7 (0x4488aaf4000) > > libkvm.so.7 => /lib/libkvm.so.7 (0x44888f77000) > > libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x4488ba02000) > > libsbuf.so.6 => /lib/libsbuf.so.6 (0x4488c68d000) > > libelf.so.2 => /lib/libelf.so.2 (0x4488ca45000) > > > > So that looks scary, like rust is 100x larger binaries... But at runtime > > it's about the same: > > USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND > > imp 14735 0.0 0.0 14140 4828 0 S+ 20:38 0:00.04 gstat > > imp 14766 1.3 0.0 15772 6256 0 S+ 20:39 0:00.02 gstat-rs > > > > So the runtime size is at least in the same ballpark (still larger, but > > not crazy larger). More CPU too, > > but that's just a polling artifact I think (other times gstat had some, > > and gstat-rs didn't). > > > > Why is the rust binary so much larger? Are the rust runtime and > > dependencies statically linked? > > > > Yes, that's a large part of it. Rust libraries are usually statically > linked (though they don't have to be). For example, in the output above, > notice that gstat-rs does not link to ncurses. That's because the > equivalent library is statically linked in instead. By 'equivalent' do you mean crossterm crate? In other words, gstat-rs does not use [n]curses, am I right? Looking at the list of supported terminals, it sounds as if crossterm just hardcodes xterm control sequences. > Also, rust programs by > default include goodies like stack unwinding on panic, which takes extra > code too. But that can be turned off if you really want to save space. > -Alan > > > From nobody Sun Jan 21 04:44:16 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THgk60xGYz58GLv for ; Sun, 21 Jan 2024 04:44:30 +0000 (UTC) (envelope-from ihor@antonovs.family) Received: from mail.antonovs.family (mail.antonovs.family [100.25.240.195]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.antonovs.family", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THgk44t4dz4bTJ for ; Sun, 21 Jan 2024 04:44:28 +0000 (UTC) (envelope-from ihor@antonovs.family) Authentication-Results: mx1.freebsd.org; dkim=none ("invalid DKIM record") header.d=antonovs.family header.s=20200215 header.b=4+sx6Zkq; dmarc=pass (policy=none) header.from=antonovs.family; spf=pass (mx1.freebsd.org: domain of ihor@antonovs.family designates 100.25.240.195 as permitted sender) smtp.mailfrom=ihor@antonovs.family DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antonovs.family; s=20200215; t=1705812258; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=dwevDTgAGavQGsO5ypDduU/D+TpIrV402XJ1dLgpIog=; b=4+sx6ZkqYPFFaUwckw6AbBDDHOyhRlh7MtXcQdOdc2E7ckr5R8/RNr1BmU6+7HMYVqZ4sF ouB1rLhCHqUs0CB4OvAv4MXHJNiI/MvyvjeHMSfstT2pQsNnPX39ox4MqZK9AcpwSWeBkO KMoLkgz/ZbxAUrjDtxmwRz5jBA2i06k= Received: by mail.antonovs.family (OpenSMTPD) with ESMTPSA id 0887769d (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for ; Sun, 21 Jan 2024 04:44:18 +0000 (UTC) Message-ID: Date: Sat, 20 Jan 2024 20:44:16 -0800 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Case for Rust (in the base system) Content-Language: en-US To: freebsd-hackers@freebsd.org References: <1673801705774097@mail.yandex.ru> From: Ihor Antonov In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.30 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.97)[-0.972]; DMARC_POLICY_ALLOW(-0.50)[antonovs.family,none]; NEURAL_SPAM_MEDIUM(0.46)[0.458]; R_SPF_ALLOW(-0.20)[+mx]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_TLS_ALL(0.00)[]; ASN(0.00)[asn:14618, ipnet:100.24.0.0/13, country:US]; RCVD_COUNT_ONE(0.00)[1]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+]; MID_RHS_MATCH_FROM(0.00)[]; ARC_NA(0.00)[]; R_DKIM_PERMFAIL(0.00)[antonovs.family:s=20200215]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[antonovs.family:~] X-Rspamd-Queue-Id: 4THgk44t4dz4bTJ On 1/20/24 14:31, Warner Losh wrote: ... As someone who's been writing rust since 2018 both professionally and for personal projects I want to share my perspective on the question. I've come full circle from being a zealous rust fan-boi and now back to being a careful skeptic. There is a lot of ground I want to cover in one email so I excuse my style, I will be happy to elaborate and provide more data to back up my statements. Rust in base ------------ I think the consensus in this thread has already reached the right conclusion. This would be a absolutely counter-productive for the following reasons: - Rust needs its own special brand of LLVM. We all know how long it takes to build. - Rust compiler is not usable without Cargo, and Cargo is a fast-evolving project   that will need constant upkeep. - There is no way to bootstrap rust compiler other than by using previous   version of their compiler. Effectively you start from a blob from a third   party that you need tp trust. This can be a huge problem for people who care   about supply chain security. C/C++ compilers can be bootstrapped in a reasonable   amount of steps almost from nothing (google GNU Mes, stage0) - Rust and its entire ecosystem has severe dependency bloat problem. It is a   'left-pad' minefield. For those who want proof take a look at Cargo.toml files   of Cargo and rustc projects - they depend of half of the Internet. Getting   a closed-loop self-sufficient set of crates is almost impossible. Rust compiler   is not self-hosting and its dependency set has unbounded growth problems. - There could also be legal problems, as Rust Foundation is not a very adequate   or mature entity. Not so long ago they were trying to ban all "unapproved mentions   of the word Rust", waving their trademark left and right.   Search for "rust drama" on the internet  to find more details. Rust in General --------------- Rust's ecosystem is infected with async, aka. function coloring problem. It creates so much more pain that writing rust becomes nearly impossible. But hype-driven crowd has not yet realized it. Read more [2] Rust in Ports ------------- Something like mentioned `freebsd-rust` separate repository could make sense, with careful crate curation to maintain self-sustaining offline-build capable set. And avoid async rust at all costs. The question here - what is the "contract" here?  I dont think we are ready to force Rust on every FreeBSD src consumer. Alternatives ------------ I never thought I would ever say this - but C++20/23 is actually not that bad. C++20 modules are finally here and they actually solve header problems. Linux kernel developers were discussing C++ last week here [1] for use in Linux kernel. Lots of good reasons expressed. Replying to Warner's comment: > We have had C++ in base for many years, but I don’t see any good libraries > for CLI, logging, JSON, etc. Despite being full time FreeBSD user since 2017 I didn't know we needed those (and I am happy to contribute) I will say that this is not a C/C++ problem and Rust is definitely not a solution It is a FreeBSD problem and there are 2 aspects to it: 1. Social Aspect - we have a problem with attracting contributors:     1.1. A path to becoming a src contributor is vage and unreasonably long.     1.2. Unclear project directions(from a newcomers perspective)          Is FreeBSD a stagnation cult? Do we want to re-implement every linux feature?          Were does the Project go? Who is in charge? How decisions are made?     1.3 Unclear who needs what. It is the first time I hear Allan needs help with         writing code. (Allan - expect a dm to discuss details, I'm happy to help) 2. Technical Aspect     2.1. FreeBSD has tooling problem: bespoke BSD Makefiles are not making it easy          to start a new project or port new code. IMHO we need to import Ninja and Cmake          into base to make it easy write and _test_ more C/C++ code.          Phabricator forces everyone to have PHP. Bugzilla is a retro-vomit from 2000,          Jenkins is a devops nightmare from hell (speaking from a decade of personal experience)     2.1. FreeBSD has information fragmentation problem: Where was that piece of information?          A PR on github? Review on Phab? Maybe it is in the wiki?          Check the handbook to be sure. Oh, right, it was that patch attached to a bugzilla          comment. Go check Jenkins if the latest *post* commit run as succeeded... Summary ======== As much as I love the idea of Rust, I don't think it is going to solve our problems. Rust is hype tech at the moment and 2 years down the road compaines will start to realize how much maintenance of async rust code actually costs. I would very much like to see us simplify contribution track. On the technical side - migrate off of phabricator to gitea and import cmake and ninja. Kill bugzilla and build a decent pre-commit CI. --------- [1] https://lore.kernel.org/lkml/3465e0c6-f5b2-4c42-95eb-29361481f805@zytor.com/#t [2] https://blog.hugpoint.tech/avoid_async_rust.html Ihor Antonov -- Ihor Antonov From nobody Sun Jan 21 05:10:24 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THhJB1BWKz58J5c for ; Sun, 21 Jan 2024 05:10:34 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Received: from www121.sakura.ne.jp (www121.sakura.ne.jp [153.125.133.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THhJ936Hwz4fW7; Sun, 21 Jan 2024 05:10:32 +0000 (UTC) (envelope-from junchoon@dec.sakura.ne.jp) Authentication-Results: mx1.freebsd.org; none Received: from kalamity.joker.local (123-1-91-49.area1b.commufa.jp [123.1.91.49]) (authenticated bits=0) by www121.sakura.ne.jp (8.17.1/8.17.1/[SAKURA-WEB]/20201212) with ESMTPA id 40L5AOAV039991; Sun, 21 Jan 2024 14:10:24 +0900 (JST) (envelope-from junchoon@dec.sakura.ne.jp) Date: Sun, 21 Jan 2024 14:10:24 +0900 From: Tomoaki AOKI To: Alan Somers Cc: Warner Losh , Aleksandr Fedorov , FreeBSD Hackers , Scott Long , "Goran Meki??" Subject: Re: The Case for Rust (in the base system) Message-Id: <20240121141024.e275343c0e7e3f86a50f4490@dec.sakura.ne.jp> In-Reply-To: References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> Organization: Junchoon corps X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.33; amd64-portbld-freebsd14.0) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4THhJ936Hwz4fW7 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:7684, ipnet:153.125.128.0/18, country:JP] On Sat, 20 Jan 2024 21:14:59 -0700 Alan Somers wrote: > On Sat, Jan 20, 2024, 8:44 PM Warner Losh wrote: > > > > > > > On Sat, Jan 20, 2024, 7:20 PM Alan Somers wrote: > > > >> On Sat, Jan 20, 2024 at 7:06 PM Tomoaki AOKI > >> wrote: > >> > > >> > On Sat, 20 Jan 2024 15:31:23 -0700 > >> > Warner Losh wrote: > >> > > >> > > On Sat, Jan 20, 2024 at 11:45 AM Aleksandr Fedorov < > >> wigneddoom@yandex.ru> > >> > > wrote: > >> > > > >> > > > What about external dependencies? > >> > > > > >> > > > > >> https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.toml#L19 > >> > > > > >> https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > >> > > > > >> > > > Is there any plan for which crates we should take into the base > >> system? > >> > > > > >> > > > We have had C++ in base for many years, but I don’t see any good > >> libraries > >> > > > for CLI, logging, JSON, etc. > >> > > > > >> > > > > >> > > > > >> https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-host-tools > >> > > > > >> > > > Where is the support for Freebsd as a primary platform? ARM, RISC-V, > >> > > > Power? Should we rewrite devd? > >> > > > > >> > > > I think we need to start by providing official repositories (e.g > >> > > > git.FreeBSD.org/rust.git or git.FreeBSD.org/go.git) > >> > > > for different languages that include stable bindings to the system > >> API: > >> > > > - sysctl > >> > > > - libgeom > >> > > > - libifconfig > >> > > > - netgraph > >> > > > - jail > >> > > > - etc. > >> > > > > >> > > > So that it’s not just some anonymous on crates.io that represents > >> these > >> > > > bindings, but our community. > >> > > > Officially, with support for a stable ABI for releases, security > >> patches, > >> > > > etc. > >> > > > > >> > > > After this, it will be possible to think about which components to > >> include > >> > > > in the base system. > >> > > > > >> > > > I would be glad to see a more modern language than C in the > >> database, but > >> > > > I’m afraid that it will be like with C++, > >> > > > that we will get a couple of daemons and utilities and that’s all. > >> > > > > >> > > > >> > > These are all good questions that need good answers, though > >> necessarily to > >> > > get started. > >> > > > >> > > But the other question that occured to me after my last posting was > >> "What > >> > > about build integration?" > >> > > How much of the rust automation do we take in vs how much do we drive > >> from > >> > > a future bsd.rust.mk. > >> > > I can sketch out bsd.rust.mk (to pick an arbitrary name, we'd likely > >> need > >> > > one for what we traditionally > >> > > think of as libraries (which may or may not map 1:1 onto crates: we > >> could > >> > > have c callable libraries > >> > > written in rust in the future, for example) and one for binaries. > >> > > Initially, though, if we go with the > >> > > 'make rust tests possible' then we'd likely need the appropriate > >> packages > >> > > installed for whatever > >> > > dependencies we'd have in the tests. This would give us a taste for > >> what > >> > > we'd need to do for > >> > > base, I'd think. Once we had that notion, I can easily see there > >> needing to > >> > > be some sort of > >> > > rust bindings for ATF/kyua as one of the first libraries / crates that > >> > > would test that aspect of > >> > > the build system. That all would be up to the people writing the > >> tests in > >> > > rust, I'd imagine. > >> > > > >> > > While I could jot out the basics of this integration (so one could > >> just add > >> > > the rust > >> > > tools to a subdir or subdirs, include the bsd.rust.mk or whatever > >> and then > >> > > it would build > >> > > if rust is enabled, and would emit a warning it was skipped because > >> rust > >> > > was disabled). > >> > > We'd find out if this is workable or not and iterate from there. But > >> that > >> > > would also require > >> > > active participation from the rust advocates to make it a reality: I > >> can > >> > > put together the > >> > > build infrastructure for the disabled case, but likely can't on my > >> own do > >> > > the rust enabled > >> > > case. I'd be happy to work with someone to do that, but I'm not going > >> to be > >> > > able to do > >> > > that myself: my need for rust is slight, my knowledge of rust is > >> weak, etc. > >> > > Working with > >> > > someone (or ideally several someones), though it could become > >> reality. So > >> > > please contact > >> > > me if you'd like to work on this. > >> > > > >> > > Warner > >> > > >> > One way to go could be moving programs rewritten with rust to ports. > >> > There are some programs (not in rust, though) moved to ports, like rcs. > >> > >> I've already done this with a few, though I didn't delete the C > >> versions from base. > >> usr.bin/gstat => sysutils/gstat-rs > >> tools/regression/fsx => devel/fsx > >> > > > > So > > % size `which gstat-rs` `which gstat` > > text data bss dec hex filename > > 2094442 176472 568 2271482 0x22a8fa /usr/local/sbin/gstat-rs > > 19350 1180 41 20571 0x505b /usr/sbin/gstat > > % file `which gstat-rs` `which gstat` > > /usr/local/sbin/gstat-rs: ELF 64-bit LSB pie executable, ARM aarch64, > > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, > > FreeBSD-style, stripped > > /usr/sbin/gstat: ELF 64-bit LSB pie executable, ARM aarch64, > > version 1 (FreeBSD), dynamically linked, interpreter /libexec/ld-elf.so.1, > > for FreeBSD 15.0 (1500008), FreeBSD-style, stripped > > 8:36pm brazos:[3826]> ldd `which gstat-rs` `which gstat` > > /usr/local/sbin/gstat-rs: > > libgeom.so.5 => /lib/libgeom.so.5 (0x60fd38647000) > > libthr.so.3 => /lib/libthr.so.3 (0x60fd38b57000) > > libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x60fd39af1000) > > libc.so.7 => /lib/libc.so.7 (0x60fd3be6f000) > > libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x60fd3a009000) > > libsbuf.so.6 => /lib/libsbuf.so.6 (0x60fd3a55e000) > > /usr/sbin/gstat: > > libdevstat.so.7 => /lib/libdevstat.so.7 (0x448867cd000) > > libgeom.so.5 => /lib/libgeom.so.5 (0x4488710b000) > > libedit.so.8 => /lib/libedit.so.8 (0x44887f8d000) > > libtinfow.so.9 => /lib/libtinfow.so.9 (0x44888aab000) > > libncursesw.so.9 => /lib/libncursesw.so.9 (0x44889c60000) > > libc.so.7 => /lib/libc.so.7 (0x4488aaf4000) > > libkvm.so.7 => /lib/libkvm.so.7 (0x44888f77000) > > libbsdxml.so.4 => /lib/libbsdxml.so.4 (0x4488ba02000) > > libsbuf.so.6 => /lib/libsbuf.so.6 (0x4488c68d000) > > libelf.so.2 => /lib/libelf.so.2 (0x4488ca45000) > > > > So that looks scary, like rust is 100x larger binaries... But at runtime > > it's about the same: > > USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND > > imp 14735 0.0 0.0 14140 4828 0 S+ 20:38 0:00.04 gstat > > imp 14766 1.3 0.0 15772 6256 0 S+ 20:39 0:00.02 gstat-rs > > > > So the runtime size is at least in the same ballpark (still larger, but > > not crazy larger). More CPU too, > > but that's just a polling artifact I think (other times gstat had some, > > and gstat-rs didn't). > > > > Why is the rust binary so much larger? Are the rust runtime and > > dependencies statically linked? > > > > Yes, that's a large part of it. Rust libraries are usually statically > linked (though they don't have to be). For example, in the output above, > notice that gstat-rs does not link to ncurses. That's because the > equivalent library is statically linked in instead. Also, rust programs by > default include goodies like stack unwinding on panic, which takes extra > code too. But that can be turned off if you really want to save space. > -Alan Because of these, I feel rust fits best for commercial DOS apps, not Unix-based OS'es. In DOS era, AFAIK, most programs installed required libraries at the same directory which its executable is installed, regarless exactly same libraries are installed in other directory by other softwares. This looks very similar as current rust default, except that libraries are statically linked in rust. But rust seems to have (non-default) option to create shared libraries by --crate-type=dylib and --crate-type=cdylib options [1]. Charlie Li pointed me this page before [2]. Without this kind of options, linking rust codes with C/C++ codes would be nonsense. (Whichever should have this kind of options, but rust ABI seems to be too unstalbe [changing rapidly] to implement it in C/C++ side.) I'd not yet dug in deep enough to conclude or write rust code myself, so just a thought for now, but I currently think we would better wait for rust ABI to be stabilized. Until then, rust codes in ports may increase and maintainers good at rust would increase, too. It would greatly help to investigate how to introduce rust codes in base. [1] https://doc.rust-lang.org/reference/linkage.html [2] https://lists.freebsd.org/archives/freebsd-ports/2023-September/004546.html -- Tomoaki AOKI From nobody Sun Jan 21 07:32:58 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THlTr6HFhz56qYV for ; Sun, 21 Jan 2024 07:34:08 +0000 (UTC) (envelope-from lain@fair.moe) Received: from mail.076.ne.jp (mail.076.ne.jp [45.76.218.69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THlTn6dlNz4rjQ for ; Sun, 21 Jan 2024 07:34:05 +0000 (UTC) (envelope-from lain@fair.moe) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=076.ne.jp header.s=dkim header.b=KkYvlkMp; dmarc=none; spf=none (mx1.freebsd.org: domain of lain@fair.moe has no SPF policy when checking 45.76.218.69) smtp.mailfrom=lain@fair.moe Received: from mail.076.ne.jp (localhost [127.0.0.1]) by mail.076.ne.jp (Postfix) with ESMTP id 4THlTc72CQzW42R for ; Sun, 21 Jan 2024 16:33:56 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=076.ne.jp; h= user-agent:in-reply-to:content-disposition:content-type :mime-version:references:message-id:subject:to:from:date; s= dkim; t=1705822435; x=1708414436; bh=QRASqGoGPLPOeE7+Ian7bmjtiWR 8o5yyyxGWNMYxnNg=; b=KkYvlkMpubMV/GjvpwOFONccdSTW4R4HuR6R1Iaz/CP VT+XGBvMVQTIzzOnpzQI2N4m5+R2N6SbTkXgV0Q6M+ZEgrVmKOEM1hFx5UWestxA POXqjB1FnacJnP7OrgQQb+32PNZxVWea7L5V5OdlBheM+TgSiW/hflup1tyvY+pC lFun4KkhdHKqtDOxdOF/wbu3BR0/d8Kxh9IqG91H55Ke02Q11eWsHb/ali5jkukw 0o97sYALXaZPPnSfUrTFCD+IAg5zukwkDgKHkWXUCNGCbRvDqsQ/s02YA6IeEfEf PPbjxDSPc3pdbDLNn74t+t2TDfy5dHmDB23vIDYjiCg== X-Virus-Scanned: Debian amavisd-new at guest.guest Received: from mail.076.ne.jp ([127.0.0.1]) by mail.076.ne.jp (mail.076.ne.jp [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id nySd7lXfowtF for ; Sun, 21 Jan 2024 16:33:55 +0900 (JST) Received: from mail.fair.moe (ip1.193.076.moe [219.117.254.193]) by mail.076.ne.jp (Postfix) with ESMTPSA id 4THlTb6tqPzW3wr for ; Sun, 21 Jan 2024 16:33:55 +0900 (JST) Date: Sun, 21 Jan 2024 16:32:58 +0900 From: "lain." To: freebsd-hackers@freebsd.org Subject: Re: Re: The Case for Rust (in the base system) Message-ID: <5as7lcxskqe6rug25i6jlwtinfg5hrt2kbeo3t3lp5on33fkbv@opjtc4eyztl3> X-Location: =?utf-8?B?IkVhcnRoL+WcsOeQgyI=?= X-Operating-System: "GNU/Linux" References: <1673801705774097@mail.yandex.ru> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="bnx6yanxghufx6kl" Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20231221 X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.90 / 15.00]; SIGNED_PGP(-2.00)[]; NEURAL_HAM_SHORT(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; MID_RHS_NOT_FQDN(0.50)[]; R_DKIM_ALLOW(-0.20)[076.ne.jp:s=dkim]; MIME_GOOD(-0.20)[multipart/signed,text/plain]; DMARC_NA(0.00)[fair.moe]; RCVD_VIA_SMTP_AUTH(0.00)[]; ASN(0.00)[asn:20473, ipnet:45.76.192.0/19, country:US]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+,1:+,2:~]; R_SPF_NA(0.00)[no SPF record]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; RCVD_COUNT_THREE(0.00)[3]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_TLS_LAST(0.00)[]; DKIM_TRACE(0.00)[076.ne.jp:+] X-Rspamd-Queue-Id: 4THlTn6dlNz4rjQ --bnx6yanxghufx6kl Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable So just like Linux, FreeBSD is going to put the Rust compiler into the system? Just to put my own perspective into the mix, the same opinion I had for Linux, and so many other projects: why Rust? Just like Java and Microsoft Java (and by that I mean C#) in the 2000s, Javascript and Python in the 2010s, and C++ in the 1990s, it looks like Rust is the new fad language in the 2020s that will become irrelevent somewhere in the 2030s, and there will be calls to rewrite legacy Rust programs to whatever is the hip language in the 2030s until that goes out of fashion by the 2040s. My bet on what the 2030s hip language will be is probably Zig, and 2040s would be Jai or Carbon, considering the pattern so far. One argument I see a lot is to make stuff ready for the next generations of programmers to take over as the older programmers retire, but as a younger C developer, I can't see how C is harder than the language of the decade. On the contrary, I find it a lot easier to code in C, because as long as you keep it simple (the hardest part for most programmers), all you need is a text editor and a compiler, and you learn a lot about the hardware you're working with along the way. With Rust, the compiler stops you from destroying the memory, but will never teach you how you can avoid that, simply because there's no incentive in learning that. In the short term this might be beneficial, but in the long term this can be catastrophic, as the amount of people who understand hardware declines, so does innovation, productivity, and even the ability to maintain already existing software. Of course FreeBSD is not my project, and the FreeBSD devs ultimately decide its direction, but nobody has historically listened to me until it was already way too late. I just wanted to provide my input on the whole "rewrite programs that work perfectly fine in Rust" mentality that has spun up in recent years, which already affected compile times spectacularly in bad ways. --=20 lain. Did you know that? 90% of all emails sent on a daily basis are being sent in plain text, and i= t's super easy to intercept emails as they flow over the internet? Never send passwords, tokens, personal information, or other volunerable in= formation without proper PGP encryption! If you're writing your emails unencrypted, please consider sending PGP encr= ypted emails for security reasons. You can find my PGP public key at: https://fair.moe/lain.asc Every good email client is able to send encrypted emails. If yours can't, then you should consider switching to a secure email client= , because yours just sucks. My recommendations are Claws Mail or NeoMutt. For instructions on how to encrypt your emails: https://unixsheikh.com/tutorials/gnupg-tutorial.html --bnx6yanxghufx6kl Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQGzBAEBCAAdFiEEozVhUpXECiNYIKIXtWNzC1Y29b0FAmWsyKcACgkQtWNzC1Y2 9b20ewwAk4db0OrhHF238OkwrqRkpc9CiRDKnHpjNYfp78HqJlmctjcPXn7+QFLL 0mE1C2BkLLxm1TJhiBB1Lti9b1RDgJhNOoiKyE10X2rD2e798Hftnt9IzeKMI0oL J0iDwYQVDqHOFVJIZ6moDrBbHauDErJ6+OoVPXO5k1reLHqwNcMBxSbAgDqmhI5l D+wv6zpaRpzW5W8XqtjOhYp9cJo6UUJyoMd8yCWxwog95BkTcPao9ppV/5yhSUXi dvzzblx/V60sq00bmtauVdw/j4VAJ1H5L3KAXe26rJAhCmlwGIpfaBcaUDb7brH3 UYyUe0NdbvoKN03StLs6Cs0uBy21u9mVArcPicWrEOHhnEPXmWQJLkInXVbVX0JD zv+G/tVhznSSi69m9ClppWapgRzt2NdHCmM/11YAPek958Ypi2yWvb/LQ319enX7 Evr3Ctg1UIV6rrsymv2RjMWsI1/vP0FfgD6qpaFmz5145pc3jeJ/0vqrme28Huiy hiIHatYL =JEl9 -----END PGP SIGNATURE----- --bnx6yanxghufx6kl-- From nobody Sun Jan 21 07:38:56 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THlbT3hlgz56rBx for ; Sun, 21 Jan 2024 07:39:01 +0000 (UTC) (envelope-from robert@rrbrussell.com) Received: from out5-smtp.messagingengine.com (out5-smtp.messagingengine.com [66.111.4.29]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THlbS3Zd7z4t0n for ; Sun, 21 Jan 2024 07:39:00 +0000 (UTC) (envelope-from robert@rrbrussell.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=rrbrussell.com header.s=fm2 header.b=RjfSrXI8; dkim=pass header.d=messagingengine.com header.s=fm3 header.b="t 4Z+z5D"; dmarc=pass (policy=quarantine) header.from=rrbrussell.com; spf=pass (mx1.freebsd.org: domain of robert@rrbrussell.com designates 66.111.4.29 as permitted sender) smtp.mailfrom=robert@rrbrussell.com Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 167B85C00F8 for ; Sun, 21 Jan 2024 02:39:00 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute6.internal (MEProxy); Sun, 21 Jan 2024 02:39:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rrbrussell.com; h=cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1705822740; x=1705909140; bh=ceEXBjomqo1jCVg6kknsORf+42RCOtFHrMOse8Em230=; b= RjfSrXI8OMHyt8JtXUF95f2IFw5M+9JHTKOeDddHuwJgWKIzjZmIiTTQdZiDW9Z7 ducPBOXCqqxSl6GaTpkicEpT5cBZzgI2RX/XKVZgdTibXLEl9dMq/cWcZXucFRLq gmYYawPC75sVe4e/Yy+5qFB1Fz2RrS4uQxgU3dA3GOKf1udpDT1mpO2PDAjMu6IG ygTS/I0gUw+sVPFIFpRjo9jsXVceGxgBrwqJ5MfCH1lOo2AMfyb3V3GyWa0HJ3Jt 92Cn0yqxFxFAsI1zb6qTcSoeSGz/eYDZ4maLd8fZKab+dHisXLaopShjHr/UgB2g xbb4Iq9M6LWa6GsQIkafeg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1705822740; x= 1705909140; bh=ceEXBjomqo1jCVg6kknsORf+42RCOtFHrMOse8Em230=; b=t 4Z+z5DyJbf3k86J1P2MH+n+0GrOwMMgxcEPtzWY9vGbkjebpD/j6nNqk/Jovfaab evRSDkWjO90LFs0aWgyAOWGGx0Wbzw/c+1pwaeX4eQn5hEGoIAirR9AgFtuTVXLG +Hpm9yZ80p2FiZQ1of0bqFEsGeqtd7za9rrCBvdNKhxdfZCRFg9d6gzNMGWGQ5iK LrLXI68lRsWvuqQHrCOUSM+dQH7LX8dTFlz2yi7WibrnrUCqK5LZco2SvkrqffPb 9LhyGPaau2SBKQFyj0A1CegvDjHv1JDtZBySjlZqV0A4m75dtTCmS8hW3Wmvhwua Jd/J6BsK2FNrwc5Fpr7Wg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdekfedguddtlecutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhepfffhvffukfgjfhfogggtgfesth hqredtredtjeenucfhrhhomhepfdftohgsvghrthcutfdrucftuhhsshgvlhhlfdcuoehr ohgsvghrthesrhhrsghruhhsshgvlhhlrdgtohhmqeenucggtffrrghtthgvrhhnpeefke duvdeftdfftdfhffegleelfedvjefggeelhefhuddtleeftdffgeejveevudenucffohhm rghinhepghhithhhuhgsrdgtohhmpdhmrghinhdrrhhspdhruhhsthdqlhgrnhhgrdhorh hgpdhfrhgvvggsshgurdhorhhgpdhruhhsthdrmhhkpdhfvgguohhrrghprhhojhgvtght rdhorhhgnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomh eprhhosggvrhhtsehrrhgsrhhushhsvghllhdrtghomh X-ME-Proxy: Feedback-ID: ie421460a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Sun, 21 Jan 2024 02:38:59 -0500 (EST) Date: Sun, 21 Jan 2024 01:38:56 -0600 From: "Robert R. Russell" To: freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) Message-ID: <20240121013856.77ad3767@venus.private.rrbrussell.com> In-Reply-To: <20240121141024.e275343c0e7e3f86a50f4490@dec.sakura.ne.jp> References: <1673801705774097@mail.yandex.ru> <20240121110611.af567b0ac3a8fd8593ffcb7f@dec.sakura.ne.jp> <20240121141024.e275343c0e7e3f86a50f4490@dec.sakura.ne.jp> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; amd64-portbld-freebsd14.0) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.50 / 15.00]; NEURAL_HAM_SHORT(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[rrbrussell.com,quarantine]; RWL_MAILSPIKE_EXCELLENT(-0.40)[66.111.4.29:from]; R_DKIM_ALLOW(-0.20)[rrbrussell.com:s=fm2,messagingengine.com:s=fm3]; R_SPF_ALLOW(-0.20)[+ip4:66.111.4.29]; RCVD_IN_DNSWL_LOW(-0.10)[66.111.4.29:from]; MIME_GOOD(-0.10)[text/plain]; DKIM_TRACE(0.00)[rrbrussell.com:+,messagingengine.com:+]; ARC_NA(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; RCVD_TLS_LAST(0.00)[]; ASN(0.00)[asn:19151, ipnet:66.111.4.0/24, country:US]; MIME_TRACE(0.00)[0:+]; TO_DN_NONE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; FREEFALL_USER(0.00)[robert]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; MID_RHS_MATCH_FROMTLD(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; DWL_DNSWL_NONE(0.00)[messagingengine.com:dkim] X-Rspamd-Queue-Id: 4THlbS3Zd7z4t0n On Sun, 21 Jan 2024 14:10:24 +0900 Tomoaki AOKI wrote: > On Sat, 20 Jan 2024 21:14:59 -0700 > Alan Somers wrote: >=20 > > On Sat, Jan 20, 2024, 8:44=E2=80=AFPM Warner Losh wrot= e: > > =20 > > > > > > > > > On Sat, Jan 20, 2024, 7:20=E2=80=AFPM Alan Somers > > > wrote:=20 > > >> On Sat, Jan 20, 2024 at 7:06=E2=80=AFPM Tomoaki AOKI > > >> wrote: =20 > > >> > > > >> > On Sat, 20 Jan 2024 15:31:23 -0700 > > >> > Warner Losh wrote: > > >> > =20 > > >> > > On Sat, Jan 20, 2024 at 11:45=E2=80=AFAM Aleksandr Fedorov < =20 > > >> wigneddoom@yandex.ru> =20 > > >> > > wrote: > > >> > > =20 > > >> > > > What about external dependencies? > > >> > > > > > >> > > > =20 > > >> https://github.com/Axcient/freebsd-nfs-exporter/blob/master/Cargo.to= ml#L19 > > >> =20 > > >> > > > =20 > > >> https://github.com/asomers/gstat-rs/blob/master/gstat/src/main.rs#L20 > > >> =20 > > >> > > > > > >> > > > Is there any plan for which crates we should take into the > > >> > > > base =20 > > >> system? =20 > > >> > > > > > >> > > > We have had C++ in base for many years, but I don=E2=80=99t see > > >> > > > any good =20 > > >> libraries =20 > > >> > > > for CLI, logging, JSON, etc. > > >> > > > > > >> > > > > > >> > > > =20 > > >> https://doc.rust-lang.org/rustc/platform-support.html#tier-1-with-ho= st-tools > > >> =20 > > >> > > > > > >> > > > Where is the support for Freebsd as a primary platform? > > >> > > > ARM, RISC-V, Power? Should we rewrite devd? > > >> > > > > > >> > > > I think we need to start by providing official > > >> > > > repositories (e.g git.FreeBSD.org/rust.git or > > >> > > > git.FreeBSD.org/go.git) for different languages that > > >> > > > include stable bindings to the system =20 > > >> API: =20 > > >> > > > - sysctl > > >> > > > - libgeom > > >> > > > - libifconfig > > >> > > > - netgraph > > >> > > > - jail > > >> > > > - etc. > > >> > > > > > >> > > > So that it=E2=80=99s not just some anonymous on crates.io that > > >> > > > represents =20 > > >> these =20 > > >> > > > bindings, but our community. > > >> > > > Officially, with support for a stable ABI for releases, > > >> > > > security =20 > > >> patches, =20 > > >> > > > etc. > > >> > > > > > >> > > > After this, it will be possible to think about which > > >> > > > components to =20 > > >> include =20 > > >> > > > in the base system. > > >> > > > > > >> > > > I would be glad to see a more modern language than C in > > >> > > > the =20 > > >> database, but =20 > > >> > > > I=E2=80=99m afraid that it will be like with C++, > > >> > > > that we will get a couple of daemons and utilities and > > >> > > > that=E2=80=99s all.=20 > > >> > > > > >> > > These are all good questions that need good answers, though =20 > > >> necessarily to =20 > > >> > > get started. > > >> > > > > >> > > But the other question that occured to me after my last > > >> > > posting was =20 > > >> "What =20 > > >> > > about build integration?" > > >> > > How much of the rust automation do we take in vs how much do > > >> > > we drive =20 > > >> from =20 > > >> > > a future bsd.rust.mk. > > >> > > I can sketch out bsd.rust.mk (to pick an arbitrary name, > > >> > > we'd likely =20 > > >> need =20 > > >> > > one for what we traditionally > > >> > > think of as libraries (which may or may not map 1:1 onto > > >> > > crates: we =20 > > >> could =20 > > >> > > have c callable libraries > > >> > > written in rust in the future, for example) and one for > > >> > > binaries. Initially, though, if we go with the > > >> > > 'make rust tests possible' then we'd likely need the > > >> > > appropriate =20 > > >> packages =20 > > >> > > installed for whatever > > >> > > dependencies we'd have in the tests. This would give us a > > >> > > taste for =20 > > >> what =20 > > >> > > we'd need to do for > > >> > > base, I'd think. Once we had that notion, I can easily see > > >> > > there =20 > > >> needing to =20 > > >> > > be some sort of > > >> > > rust bindings for ATF/kyua as one of the first libraries / > > >> > > crates that would test that aspect of > > >> > > the build system. That all would be up to the people writing > > >> > > the =20 > > >> tests in =20 > > >> > > rust, I'd imagine. > > >> > > > > >> > > While I could jot out the basics of this integration (so one > > >> > > could =20 > > >> just add =20 > > >> > > the rust > > >> > > tools to a subdir or subdirs, include the bsd.rust.mk or > > >> > > whatever =20 > > >> and then =20 > > >> > > it would build > > >> > > if rust is enabled, and would emit a warning it was skipped > > >> > > because =20 > > >> rust =20 > > >> > > was disabled). > > >> > > We'd find out if this is workable or not and iterate from > > >> > > there. But =20 > > >> that =20 > > >> > > would also require > > >> > > active participation from the rust advocates to make it a > > >> > > reality: I =20 > > >> can =20 > > >> > > put together the > > >> > > build infrastructure for the disabled case, but likely can't > > >> > > on my =20 > > >> own do =20 > > >> > > the rust enabled > > >> > > case. I'd be happy to work with someone to do that, but I'm > > >> > > not going =20 > > >> to be =20 > > >> > > able to do > > >> > > that myself: my need for rust is slight, my knowledge of > > >> > > rust is =20 > > >> weak, etc. =20 > > >> > > Working with > > >> > > someone (or ideally several someones), though it could > > >> > > become =20 > > >> reality. So =20 > > >> > > please contact > > >> > > me if you'd like to work on this. > > >> > > > > >> > > Warner =20 > > >> > > > >> > One way to go could be moving programs rewritten with rust to > > >> > ports. There are some programs (not in rust, though) moved to > > >> > ports, like rcs. =20 > > >> > > >> I've already done this with a few, though I didn't delete the C > > >> versions from base. > > >> usr.bin/gstat =3D> sysutils/gstat-rs > > >> tools/regression/fsx =3D> devel/fsx > > >> =20 > > > > > > So > > > % size `which gstat-rs` `which gstat` > > > text data bss dec hex filename > > > 2094442 176472 568 2271482 0x22a8fa > > > /usr/local/sbin/gstat-rs 19350 1180 41 20571 > > > 0x505b /usr/sbin/gstat % file `which gstat-rs` `which gstat` > > > /usr/local/sbin/gstat-rs: ELF 64-bit LSB pie executable, ARM > > > aarch64, version 1 (FreeBSD), dynamically linked, interpreter > > > /libexec/ld-elf.so.1, FreeBSD-style, stripped > > > /usr/sbin/gstat: ELF 64-bit LSB pie executable, ARM > > > aarch64, version 1 (FreeBSD), dynamically linked, interpreter > > > /libexec/ld-elf.so.1, for FreeBSD 15.0 (1500008), FreeBSD-style, > > > stripped 8:36pm brazos:[3826]> ldd `which gstat-rs` `which gstat` > > > /usr/local/sbin/gstat-rs: > > > libgeom.so.5 =3D> /lib/libgeom.so.5 (0x60fd38647000) > > > libthr.so.3 =3D> /lib/libthr.so.3 (0x60fd38b57000) > > > libgcc_s.so.1 =3D> /lib/libgcc_s.so.1 (0x60fd39af1000) > > > libc.so.7 =3D> /lib/libc.so.7 (0x60fd3be6f000) > > > libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x60fd3a009000) > > > libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x60fd3a55e000) > > > /usr/sbin/gstat: > > > libdevstat.so.7 =3D> /lib/libdevstat.so.7 (0x448867cd000) > > > libgeom.so.5 =3D> /lib/libgeom.so.5 (0x4488710b000) > > > libedit.so.8 =3D> /lib/libedit.so.8 (0x44887f8d000) > > > libtinfow.so.9 =3D> /lib/libtinfow.so.9 (0x44888aab000) > > > libncursesw.so.9 =3D> /lib/libncursesw.so.9 (0x44889c60000) > > > libc.so.7 =3D> /lib/libc.so.7 (0x4488aaf4000) > > > libkvm.so.7 =3D> /lib/libkvm.so.7 (0x44888f77000) > > > libbsdxml.so.4 =3D> /lib/libbsdxml.so.4 (0x4488ba02000) > > > libsbuf.so.6 =3D> /lib/libsbuf.so.6 (0x4488c68d000) > > > libelf.so.2 =3D> /lib/libelf.so.2 (0x4488ca45000) > > > > > > So that looks scary, like rust is 100x larger binaries... But at > > > runtime it's about the same: > > > USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME > > > COMMAND imp 14735 0.0 0.0 14140 4828 0 S+ 20:38 > > > 0:00.04 gstat imp 14766 1.3 0.0 15772 6256 0 S+ 20:39 > > > 0:00.02 gstat-rs > > > > > > So the runtime size is at least in the same ballpark (still > > > larger, but not crazy larger). More CPU too, > > > but that's just a polling artifact I think (other times gstat had > > > some, and gstat-rs didn't). > > > > > > Why is the rust binary so much larger? Are the rust runtime and > > > dependencies statically linked? > > > =20 > >=20 > > Yes, that's a large part of it. Rust libraries are usually > > statically linked (though they don't have to be). For example, in > > the output above, notice that gstat-rs does not link to ncurses. > > That's because the equivalent library is statically linked in > > instead. Also, rust programs by default include goodies like stack > > unwinding on panic, which takes extra code too. But that can be > > turned off if you really want to save space. -Alan =20 >=20 > Because of these, I feel rust fits best for commercial DOS apps, not > Unix-based OS'es. In DOS era, AFAIK, most programs installed required > libraries at the same directory which its executable is installed, > regarless exactly same libraries are installed in other directory by > other softwares. This looks very similar as current rust default, > except that libraries are statically linked in rust. >=20 > But rust seems to have (non-default) option to create shared libraries > by --crate-type=3Ddylib and --crate-type=3Dcdylib options [1]. >=20 > Charlie Li pointed me this page before [2]. >=20 > Without this kind of options, linking rust codes with C/C++ codes > would be nonsense. (Whichever should have this kind of options, but > rust ABI seems to be too unstalbe [changing rapidly] to implement it > in C/C++ side.) >=20 > I'd not yet dug in deep enough to conclude or write rust code myself, > so just a thought for now, but I currently think we would better wait > for rust ABI to be stabilized. Until then, rust codes in ports may > increase and maintainers good at rust would increase, too. > It would greatly help to investigate how to introduce rust codes in > base. >=20 > [1] https://doc.rust-lang.org/reference/linkage.html >=20 > [2] > https://lists.freebsd.org/archives/freebsd-ports/2023-September/004546.ht= ml >=20 I honestly don't expect many new or current languages to get their own dedicated FFI/ABIs in the future. Especially, if they don't want a full language specific runtime involved. Enforcing a requirement of must export to the C ABI for any libraries going into the base system is very reasonable. On the other side of things restricting the dependency list to packaged stuff is also a good idea. Cargo already includes an option for enforcing the use of a local mirror as its package source.[1] Fedora uses this to guarantee they can build any rust code they package repeatably.[2] [1] https://doc.rust-lang.org/cargo/reference/source-replacement.html [2] https://docs.fedoraproject.org/en-US/packaging-guidelines/Rust/ From nobody Sun Jan 21 07:51:32 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THlt76xPZz56ryy for ; Sun, 21 Jan 2024 07:51:43 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THlt72fsDz4vFf for ; Sun, 21 Jan 2024 07:51:42 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Authentication-Results: mx1.freebsd.org; none Received: from critter.freebsd.dk (unknown [192.168.55.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phk.freebsd.dk (Postfix) with ESMTPS id C057689281; Sun, 21 Jan 2024 07:51:34 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.17.1/8.16.1) with ESMTPS id 40L7pYB5011189 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sun, 21 Jan 2024 07:51:34 GMT (envelope-from phk@critter.freebsd.dk) Received: (from phk@localhost) by critter.freebsd.dk (8.17.1/8.16.1/Submit) id 40L7pWEF011188; Sun, 21 Jan 2024 07:51:32 GMT (envelope-from phk) Message-Id: <202401210751.40L7pWEF011188@critter.freebsd.dk> To: Ihor Antonov cc: freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) In-reply-to: From: "Poul-Henning Kamp" References: <1673801705774097@mail.yandex.ru> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <11186.1705823492.1@critter.freebsd.dk> Date: Sun, 21 Jan 2024 07:51:32 +0000 X-Rspamd-Queue-Id: 4THlt72fsDz4vFf X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:1835, ipnet:130.225.0.0/16, country:EU] -------- Ihor Antonov writes: > As much as I love the idea of Rust, I don't think it is going to solve > our problems. The tools are /never/ the real problem. I will readily agree that the ISO-C people have done more to hurt the C language, and less to improve it, than anybody else, and that we need to deal with their continued refusal to come into the 1990'ies. But after I read this entire thread, the "pro" argument for Rust seems boil down to just "all the cool kids do it". That exact same argument was used for "Perl in base" and "Java in base" previously, and if we hadn't dodged those bullets, we wouldn't be here today. The sprawling and loosely connected ports collection has several strata of "all the cool kids do it" languages, and it seems to be a much better "organism" for dealing with their eventual obsolescence, than our tightly integrated src collection. I will also "second" the comment about C++ getting to be a really good language, in particular if you play it like a violin: Just because you /paid/ for the entire bow, doesn't mean you have to /play/ the entire bow. So rather than jump onto this or some other hypewagon-of-the-year, only to regret it some years later and having to repay the technical debt with interest to get it out of the tree again, I propose that we quietly and gradually look more and more to C++ for our "advanced needs". I also propose, that next time somebody advocates for importing some "all the cool kids are doing it language" or other, we refuse to even look at their proposal, until they have proven their skill in, and dedication to, the language, by faithfully reimplementing cvsup in it, and documented how and why it is a better language for that, than Modula-3 was. Poul-Henning -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. From nobody Sun Jan 21 10:24:21 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THqMr25xxz5786Z for ; Sun, 21 Jan 2024 10:29:12 +0000 (UTC) (envelope-from freebsd-hackers@phoe.frmug.org) Received: from frmug.org (enterprise.frmug.org [213.36.253.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THqMq75WFz4CWm for ; Sun, 21 Jan 2024 10:29:11 +0000 (UTC) (envelope-from freebsd-hackers@phoe.frmug.org) Authentication-Results: mx1.freebsd.org; none Received: by frmug.org (Postfix, from userid 66) id D57FA12B96A; Sun, 21 Jan 2024 11:29:03 +0100 (CET) Received: by memo2.memo.frmug.org (Postfix, from userid 1001) id 03E7317984; Sun, 21 Jan 2024 11:24:21 +0100 (CET) Date: Sun, 21 Jan 2024 11:24:21 +0100 From: Bertrand Petit To: Poul-Henning Kamp Cc: freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) Message-ID: <20240121102421.GE14773@memo2.memo.frmug.org> References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline In-Reply-To: <202401210751.40L7pWEF011188@critter.freebsd.dk> User-Agent: Mutt/1.12.1 (2019-06-15) X-Rspamd-Queue-Id: 4THqMq75WFz4CWm X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:12322, ipnet:213.36.0.0/16, country:FR] On Sun, Jan 21, 2024 at 07:51:32AM +0000, Poul-Henning Kamp wrote: > > I also propose, that next time somebody advocates for importing > some "all the cool kids are doing it language" or other, we refuse > to even look at their proposal, until they have proven their skill > in, and dedication to, the language, by faithfully reimplementing > cvsup in it, and documented how and why it is a better language for > that, than Modula-3 was. That is probably quite tough a measure but I understand and like your point. I also would also love to read the kool kids explain why the blunt assertion that " can't be implemented unless written in rust" is true as this seems to be contrary to all I know about computer science. (They probably never heard of haskell.) That asside, as much as I would like to see erlang and zig in base (yes, I like type systems), I would never advocate for them to be considered. I find these languages as well as rust so different in their environments, runtime and ecosystems, that their integration would require a so heavy shoehorning that it would probably result in a value less than the sum of them all. One of the strong values of FreeBSD is its stability. For fun I recently booted a 4BSD-something on a VAX emulator and immediately felt at ease, because of this stability. I perceive rust, despite some of its technical merits, as unable to provide that kind of stability. This language is a fast and (still) unstable moving target, so fast that once integrated it will immediately be obsolete on release. The integrated version would probably only be usable to compile base, countless other packaged versions would be required to compile ports---I'm also thinking about llvm here. That is bound to be a maintenance nightmare, for the FreeBSD teams and for the users alike. After reading the pros and cons posted on the mailing list, merging them with my own experience, I think rust should be avoided at all costs from being integrated into base, no part of base should ever be written in rust. However, if rust needs something for a proper usage from ports such as kernel interfaces, linking facilities, etc., we should provide it from base. -- %!PS -- Bertrand Petit /D{def}def/E{exch}D/G{get}D/I{2 div}D/U{dup}D/L{roll}D/Y{setgray}D/N{newpath}D /O{N 0 0 moveto}D/P{pop}D/T{translate}D currentpagedevice/PageSize G U 0 G/w E D 1 G /h E D w I h I T 0 Y 1 setlinewidth 0 1 2 { P 120 rotate 2 4 w U mul h U mul add sqrt I 50 add {N 50 0 3 2 L 0 360 arc stroke}for}for/s{O true charpath pathbbox exch 4 -1 L E sub I 3 1 L sub I} D /l(bp)D 0.94 Y /Helvetica findfont 22 scalefont setfont l s P(x)s exch P T O l show showpage From nobody Sun Jan 21 15:02:04 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THxQv3dWSz57c8t for ; Sun, 21 Jan 2024 15:02:15 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [74.104.188.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "m5p.com", Issuer "R3" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THxQs5MBTz4gnl for ; Sun, 21 Jan 2024 15:02:13 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=pass (mx1.freebsd.org: domain of george+freebsd@m5p.com designates 74.104.188.4 as permitted sender) smtp.mailfrom=george+freebsd@m5p.com Received: from [IPV6:2001:470:1f07:15ff::26] (court.m5p.com [IPv6:2001:470:1f07:15ff:0:0:0:26]) (authenticated bits=0) by mailhost.m5p.com (8.17.1/8.15.2) with ESMTPSA id 40LF24Mv056918 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO) for ; Sun, 21 Jan 2024 10:02:10 -0500 (EST) (envelope-from george+freebsd@m5p.com) Message-ID: <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> Date: Sun, 21 Jan 2024 10:02:04 -0500 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Case for Rust (in the base system) To: freebsd-hackers@freebsd.org References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> Content-Language: en-US From: George Mitchell Autocrypt: addr=george+freebsd@m5p.com; keydata= xjMEZaHDbxYJKwYBBAHaRw8BAQdA2W6oBfS8haXY0/Ft4zS1OTLYfC8EBIADPTgMQdh85C3N KEdlb3JnZSBNaXRjaGVsbCA8Z2VvcmdlK2ZyZWVic2RAbTVwLmNvbT7CmQQTFgoAQRYhBDpv v9n4+UzMLAJ8EZocD3futmd9BQJlocSiAhsDBQkFo5qABQsJCAcCAiICBhUKCQgLAgQWAgMB Ah4HAheAAAoJEJocD3futmd9SxwBAJUi6DNdVhWCZBTv5XGy1g0JgApLWe/3S0M0zz9sn7/L AQCcJcV5k5s2rt9J5C1AUm6XVsuneVvIWXO5j1GKWk0NC844BGWhw28SCisGAQQBl1UBBQEB B0AaFz/6B95RRvjOdLZr5fSdhuIHvwr24H3ePDZSw6wlUwMBCAfCfgQYFgoAJhYhBDpvv9n4 +UzMLAJ8EZocD3futmd9BQJlocNvAhsMBQkFo5qAAAoJEJocD3futmd9RXsBANwRD9RE56F6 /jeZOrujHICLcgPiOt50Y6866v9OUTjUAP9GlC1aopfBpNwuPLJBam7oBaGqvY98VDhzOjoT 7DNbCQ== In-Reply-To: <202401210751.40L7pWEF011188@critter.freebsd.dk> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------vgSHA3F5TVcJeKcPpVHfXrIU" X-Spam-Status: No, score=0.2 required=10.0 tests=HELO_MISC_IP,HELO_NO_DOMAIN autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on mattapan.m5p.com X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.29 / 15.00]; SIGNED_PGP(-2.00)[]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; MIME_BASE64_TEXT_BOGUS(1.00)[]; NEURAL_HAM_SHORT(-1.00)[-1.000]; R_SPF_ALLOW(-0.20)[+a]; MIME_GOOD(-0.20)[multipart/signed,multipart/mixed,text/plain]; MIME_BASE64_TEXT(0.10)[]; XM_UA_NO_VERSION(0.01)[]; TAGGED_FROM(0.00)[freebsd]; RCVD_TLS_ALL(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DMARC_NA(0.00)[m5p.com]; HAS_ATTACHMENT(0.00)[]; FROM_HAS_DN(0.00)[]; ASN(0.00)[asn:701, ipnet:74.104.0.0/16, country:US]; ARC_NA(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_DN_NONE(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; RCVD_COUNT_ONE(0.00)[1]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; MID_RHS_MATCH_FROM(0.00)[]; R_DKIM_NA(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+,3:~] X-Rspamd-Queue-Id: 4THxQs5MBTz4gnl This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------vgSHA3F5TVcJeKcPpVHfXrIU Content-Type: multipart/mixed; boundary="------------vCo05IGKOP1jQAvclFP3AOEU"; protected-headers="v1" From: George Mitchell To: freebsd-hackers@freebsd.org Message-ID: <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> Subject: Re: The Case for Rust (in the base system) References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> In-Reply-To: <202401210751.40L7pWEF011188@critter.freebsd.dk> --------------vCo05IGKOP1jQAvclFP3AOEU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 T24gMS8yMS8yNCAwMjo1MSwgUG91bC1IZW5uaW5nIEthbXAgd3JvdGU6DQo+IFsuLi5dDQo+ IFRoZSB0b29scyBhcmUgL25ldmVyLyB0aGUgcmVhbCBwcm9ibGVtLg0KPiBbLi4uXQ0KPiBC dXQgYWZ0ZXIgSSByZWFkIHRoaXMgZW50aXJlIHRocmVhZCwgdGhlICJwcm8iIGFyZ3VtZW50 IGZvciBSdXN0DQo+IHNlZW1zIGJvaWwgZG93biB0byBqdXN0ICJhbGwgdGhlIGNvb2wga2lk cyBkbyBpdCIuDQo+IFsuLi5dDQo+IEkgd2lsbCBhbHNvICJzZWNvbmQiIHRoZSBjb21tZW50 IGFib3V0IEMrKyBnZXR0aW5nIHRvIGJlIGEgcmVhbGx5DQo+IGdvb2QgbGFuZ3VhZ2UsIGlu IHBhcnRpY3VsYXIgaWYgeW91IHBsYXkgaXQgbGlrZSBhIHZpb2xpbjoNCj4gWy4uLl0NCj4g UG91bC1IZW5uaW5nDQo+IA0KUG91bC1IZW5uaW5nIEthbXAgaXMgYWx3YXlzIHdvcnRoIGxp c3RlbmluZyB0by4gIEkgc2hvcnRlbmVkIG15DQpxdW90YXRpb24gaW4gb3JkZXIgdG8gZ2V0 IHRvIHRoZSByZWFsIHBvaW50IHF1aWNrbHk6DQoNCisxLg0KDQotLSBHZW9yZ2UNCg== --------------vCo05IGKOP1jQAvclFP3AOEU-- --------------vgSHA3F5TVcJeKcPpVHfXrIU Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQQ6b7/Z+PlMzCwCfBGaHA937rZnfQUCZa0x7AUDAAAAAAAKCRCaHA937rZnfayg AP9UW7FamXZMGHjy2seSrExupGKsagPbLBhSYoOaveP3eQD8Ct3P/fGmF5oInuj7BCjkbpfSj/MS fSRhib884uQ4EQk= =cKA8 -----END PGP SIGNATURE----- --------------vgSHA3F5TVcJeKcPpVHfXrIU-- From nobody Sun Jan 21 16:04:52 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THyqR159Kz57jbp for ; Sun, 21 Jan 2024 16:05:07 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-qv1-f51.google.com (mail-qv1-f51.google.com [209.85.219.51]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THyqQ185gz4r8B for ; Sun, 21 Jan 2024 16:05:06 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=fail reason="SPF not aligned (relaxed), No valid DKIM" header.from=freebsd.org (policy=none); spf=pass (mx1.freebsd.org: domain of asomers@gmail.com designates 209.85.219.51 as permitted sender) smtp.mailfrom=asomers@gmail.com Received: by mail-qv1-f51.google.com with SMTP id 6a1803df08f44-68687ff4038so4671126d6.1 for ; Sun, 21 Jan 2024 08:05:06 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705853104; x=1706457904; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fUfqP7dMApsCeA3qTDKijtdAEmkpGdCi6ObYd7KYHrk=; b=O4aoCxWOYrBz+Zk+YfUZAY0Icn7LvLR7Gr9HOvQfHO7DrbIO2XBbRL5wnWKSF7BCwn wg2y6bZGNKHcXw5LhDBQiUXxXYd6hi7a3e1mpEJwwsE8uxjkrbw4a0sffOz/2nlYZ/uO 6xYIg8/B9C+9cR/BHVBNu4kIbRbVAV3Xdm+z5gDRyUNB/eGX+JRKxaNIdUL8/GFQmonb bmR/z6boIizLgDtxVKLkG+YhNldnwlusNPe1gI6T73eaosPebOYEq85sIbwG4tShiAB8 VWG/c+bBK6m+bZeRJED5c4SjsC4294QCeeXIwQlQPALDwScqVgIJ7nR6/fQgg9vXvaNV xaOA== X-Gm-Message-State: AOJu0YyZBnuJrfkFRwX7Yyt/fxejO+YyJ508CXvJbQREzp4UpwDIgj34 GqLRmuie6U864RMHWvwjUTCJJJEgSQCwdXSuKwxcxWfWl6dPcwFixW+pgw5LhqtgDQFoIJtvHLC kJBVrGcUs+eInxLImBP0QyWCr7UlKVemi6lM= X-Google-Smtp-Source: AGHT+IFs7CTk4qqHh9jDh3fF37CMxPzBy7zIBVYEkJ8L+u7uOvV0t6Ruv1j+vR1fvMnGWYNnOY+40yOvNCPCDm39lPg= X-Received: by 2002:a0c:aad0:0:b0:685:5e54:2cb5 with SMTP id g16-20020a0caad0000000b006855e542cb5mr3120731qvb.66.1705853104574; Sun, 21 Jan 2024 08:05:04 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> In-Reply-To: <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> From: Alan Somers Date: Sun, 21 Jan 2024 09:04:52 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: George Mitchell Cc: freebsd-hackers@freebsd.org Content-Type: text/plain; charset="UTF-8" X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.90 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; FORGED_SENDER(0.30)[asomers@freebsd.org,asomers@gmail.com]; R_SPF_ALLOW(-0.20)[+ip4:209.85.128.0/17]; MIME_GOOD(-0.10)[text/plain]; DMARC_POLICY_SOFTFAIL(0.10)[freebsd.org : SPF not aligned (relaxed), No valid DKIM,none]; RCVD_COUNT_ONE(0.00)[1]; RCVD_TLS_LAST(0.00)[]; FROM_HAS_DN(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; MIME_TRACE(0.00)[0:+]; ARC_NA(0.00)[]; TO_DN_SOME(0.00)[]; MISSING_XM_UA(0.00)[]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US]; FREEMAIL_ENVFROM(0.00)[gmail.com]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_MATCH_ENVRCPT_SOME(0.00)[]; FROM_NEQ_ENVFROM(0.00)[asomers@freebsd.org,asomers@gmail.com]; FREEFALL_USER(0.00)[asomers]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; TAGGED_RCPT(0.00)[freebsd]; R_DKIM_NA(0.00)[]; RWL_MAILSPIKE_POSSIBLE(0.00)[209.85.219.51:from]; RCVD_IN_DNSWL_NONE(0.00)[209.85.219.51:from] X-Rspamd-Queue-Id: 4THyqQ185gz4r8B Wow, there have been a lot of responses. I think I touched on a sensitive issue. I'll group everything together in one reply. TLDR; I think imp's proposal is best. * Rust's ABI is too unstable to use for libraries This actually isn't a problem. The stability situation for the Rust ABI is similar to C++; you can't link a C++ app to a C++ library unless they were both built with the same compiler version. The C ABI, of course, is quite stable. And it's very easy to build a Rust library as a cdylib so that C applications can access it. But there are restrictions: the library's public API can't do things that C can't, like generic functions. * Why Rust instead of Perl, Java, C#, or Go? The crucial difference between Rust and those other four, basically between Rust and everything else since C++ [1], is that Rust is suitable for low-level systems programming. It lacks memory manangement, green threads, etc. The runtime is small (and optionally can be removed entirely). Rust isn't quite as low-level as C, but it's in about the same position as C++. * Why not just use C++ then? Speaking from experience, I'm far more productive in Rust than C++, and my code has many fewer bugs, too. I had been using C++ professionally for 11 years before I learned about Rust, but after 6 months my Rust skills were better than my C++ skills. That's why I finally realized that I wasn't the cause of my C++ problems; C++ was. In general, it feels like C++ has a cumbersome mix of low-level and high-level features. Smart pointers, for example, are handy. But because it retains so much C-compatibility C++ can't enforce the use of smart pointers. And it can't even warn against the use of dumb pointers. It certainly can't check their lifetimes. But in Rust, all pointers are smart [2], so the compiler can help you avoid a wide range of common bugs. * Rust will go out of fashion by the 2040s Perhaps it will. But Like David Chisnall, I'm afraid that if FreeBSD never modernizes, then it itself will go out of fashion by the 2040s. * " can't be implemented unless written in rust" I don't think anybody has claimed this yet. But I _have_ made a similar claim, that some things can't be written in C. I'll elaborate on the project that started this thread: the fusefs test suite. When I designed the fusefs test suite, I based it around the priniciple of Mocking. Each test case has a client thread that does normal file system access, and a server thread that implements a fuse file server. But it isn't a full implementation of a fuse file server; it's just a shim around a mock object. For each test case, the file server's behavior is programmed with expectations. The mocking technique is so limited and awkward to use in C that almost nobody bothers. Just compare the documentation for CMockery (C) with Mockall (Rust). C++'s Googlemock is somewhere in between. * async Rust sucks I disagree, but that's probably worth a separate email thread of its own. In particular, some of the content on the linked rant is not accurate. * Reimplement CVSUp in Rust That sounds like a challenge! I'm not saying that I want to do it, but I'm still interested to look at how CVSUp was done. But where is it? The port is deleted and the web page is gone. * Rust in base would double our compile times Yes, it would. That's the worst thing about it. * Rust in base would cause massive code bloat. Yes, it would, because in addition to the toolchain and standard library most Rust applications would pull in various dependencies. Command line argument parsing, serialization/deserialization, fancy data structures, etc. For both this and the above reason, I'm really liking imp's proposal for a "make extraworld" - stuff that's in base but depends on an external toolchain. [1] Yes I know about Modula-3, D, etc. But for various reasons those never gained traction. [2] Dumb pointers exist too, but they're almost never used except when binding to a C library. [3] https://github.com/lpabon/cmockery2/blob/master/doc/usage.md [4] https://docs.rs/mockall/latest/mockall/ From nobody Sun Jan 21 16:26:13 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THzHv4nPxz57lM1 for ; Sun, 21 Jan 2024 16:26:19 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THzHv24CPz4tt5; Sun, 21 Jan 2024 16:26:17 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Authentication-Results: mx1.freebsd.org; none Received: from critter.freebsd.dk (unknown [192.168.55.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phk.freebsd.dk (Postfix) with ESMTPS id B166889281; Sun, 21 Jan 2024 16:26:14 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.17.1/8.16.1) with ESMTPS id 40LGQEOb013135 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sun, 21 Jan 2024 16:26:14 GMT (envelope-from phk@critter.freebsd.dk) Received: (from phk@localhost) by critter.freebsd.dk (8.17.1/8.16.1/Submit) id 40LGQDim013134; Sun, 21 Jan 2024 16:26:13 GMT (envelope-from phk) Message-Id: <202401211626.40LGQDim013134@critter.freebsd.dk> To: Alan Somers cc: George Mitchell , freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) In-reply-to: From: "Poul-Henning Kamp" References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <13132.1705854373.1@critter.freebsd.dk> Content-Transfer-Encoding: quoted-printable Date: Sun, 21 Jan 2024 16:26:13 +0000 X-Rspamd-Queue-Id: 4THzHv24CPz4tt5 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:1835, ipnet:130.225.0.0/16, country:EU] Alan Somers writes: > * " can't be implemented unless written in rust" > > I don't think anybody has claimed this yet. But I _have_ made a similar= claim, > that some things can't be written in C. I'll elaborate on the project t= hat > started this thread: the fusefs test suite. When I designed the fusefs = test > suite, I based it around the priniciple of Mocking. [...] Why would such a test-tool live in src rather than ports ? Poul-Henning PS: I'd look for cvsup on old CD-ROMs. -- = Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe = Never attribute to malice what can adequately be explained by incompetence= . From nobody Sun Jan 21 16:40:03 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THzc12cYBz57mHX for ; Sun, 21 Jan 2024 16:40:17 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-vk1-f172.google.com (mail-vk1-f172.google.com [209.85.221.172]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THzc04SJyz3xZ3 for ; Sun, 21 Jan 2024 16:40:16 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-vk1-f172.google.com with SMTP id 71dfb90a1353d-4b74a9a9d4cso637095e0c.1 for ; Sun, 21 Jan 2024 08:40:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705855215; x=1706460015; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=UI7IghqNSeTdgvDiS70cjxtWHpx5hVzpCtArTR5M6uE=; b=OHqBdftXnuk/UkOjT92WQoljo15loi0sEqdFeSSqglG9EJvLmqBqnchnN898vDKYqV aKgt7vxJeb/z9s/qS57DiDjgJBHeb2BXRMCWBX0mgPMlDJPgJ2VBs/5vusVtMNPZcHjN ob5fdYjki+qpH+3vHEQau8h76aq4YauRJwOcKCdd9lE+XDJ8TOZraPnlufagkWVEf7/N 3dQx+KKIf0Jt2YXnuPhbLv4NiSrVrLlNT+yridS2C/TyQMYr6YIFG5O6cU76ONhCWuZ5 j9zyQq8BbWxsiigd2VWbpRegYU7xG3TyhFUhaDLLgte5bFFtcXQuLec1FRH94+5w6Cd6 ZP8Q== X-Gm-Message-State: AOJu0YyPJ4mG+MeERa6raKswG4LLPiBGdZezWvIghfoR5eKsDbCoLMzN +Gsg7MqCAedX3ODJqRVpzUZYxojeItxjKqtUBz166JnJzUmERF/D2CP5LRv1Q7Y2VISC/Xrew6T WXMH29AYN4qWE+B7todsS14SeNUWAbnqc X-Google-Smtp-Source: AGHT+IGqg5oQ5qizog953rDKn8tlgr/Ln/QI9DNY452E/gB9W4jyxOmTeQCJVDfFrttsfZR7EGO8jrbbXsHYGnR3Fw0= X-Received: by 2002:a05:6122:1698:b0:4b6:b979:a28 with SMTP id 24-20020a056122169800b004b6b9790a28mr745502vkl.17.1705855215386; Sun, 21 Jan 2024 08:40:15 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> In-Reply-To: <202401211626.40LGQDim013134@critter.freebsd.dk> From: Alan Somers Date: Sun, 21 Jan 2024 09:40:03 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Poul-Henning Kamp Cc: George Mitchell , freebsd-hackers@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4THzc04SJyz3xZ3 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Sun, Jan 21, 2024 at 9:26=E2=80=AFAM Poul-Henning Kamp wrote: > > Alan Somers writes: > > * " can't be implemented unless written in rust" > > > > I don't think anybody has claimed this yet. But I _have_ made a simila= r claim, > > that some things can't be written in C. I'll elaborate on the project = that > > started this thread: the fusefs test suite. When I designed the fusefs= test > > suite, I based it around the priniciple of Mocking. [...] > > Why would such a test-tool live in src rather than ports ? I initially considered putting it in ports just for that reason. But it's too tightly coupled to src. The tests need to change with every feature addition or bug fix to src. If the tests lived in ports, then they would have to be aware of all of the differences between main, stable/14, stable/13, releng/13.2, etc. Updates to src would have to be synchronized with updates to ports, and the package builders introduce a few days' lag. I thought that synchronization effort would be too great. That's why I put the tests in src and used C++. From nobody Sun Jan 21 16:40:52 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THzcq4pp5z57mCn for ; Sun, 21 Jan 2024 16:40:59 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "smtp.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4THzcq2f87z4144; Sun, 21 Jan 2024 16:40:59 +0000 (UTC) (envelope-from kp@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705855259; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Q88s7lAyEVr1zs+EKYBWhMob3p62HSxjB8wtpOd+pRo=; b=ByScpTzOf/Bmh065+cgp96AdaXMPQpLip1Nqym1D51MUDL0Gfc5QZ59CcjeBS2OR8mcKEl +K6PgQNuDKCbC08DOX58NpLFtHTAM5wIe4n2u+iVdjByBmH8EIYzqs8lS7rVSuY84tHPoG DpaEn3A6GND8dIa5oFEytIrrM+CWF91kXOIzxpffeI7R3djPZeR5lwquWu56ZnhgcmxDji hZzyCNJPtwHt4UJDlp4mAgfMgQaoagLnSqVYwBr3MHibselTvUUxI8SMol8Y/IRiBngExl LpUSNlyfdscS/teK3mKPEHCpLdGp1qdu4VCPenLqyupMB4LLPr6021iTyLUvGA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1705855259; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Q88s7lAyEVr1zs+EKYBWhMob3p62HSxjB8wtpOd+pRo=; b=BZDme/OgqcXRG1LJhXsllH2/FTbJ8vkNO2cwDA1zgopQqlQsmL1fs3RxBNmmDmoInNAAt2 IL4gM3ScKtaqPNT3vhwBOFbhUiNQqzcmg+iCi0FTOTDMI5NQDWx/s19o19a0JPCQtYroSN FYBoyYDstr1Bz0c9aa6WRru8RwHNJb2KMocO/K1Akh6PgIadAUGfXjnFdKsQ5NX4zvRSkU iUOnrum3tRS7QrAnNYKgjhWZeoQEKdg9/+CShmHMhmvMNIRtc85bxFQoqErpwNlRJfGAq+ IHamZuw5Bo2EySnavMuXLWN5bk+gtgXn7YWEe6YdHXZlapWJtMAuw51Sem9OzA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1705855259; a=rsa-sha256; cv=none; b=PyAkiVRqxzvtE+PQgBxpSElizdZ8lboLgEdJ+7vAASc+aCo9uZj4HfGAq9kCvmjGi02pHC Pn2d48ZzTLpVlZoF/eXXLxgeK1hDEKu8sIfQ09kPNH6oDGuqCPwEuj89x4sTb49WofuhsU V5KZBfmMJGOmgfVMyFa7IIWquQkjJq/ENTPrf1llZv9kX0WbZubSacyc0pMTU7yBnE7JTI 4aLI5RKN+jEihYbPd+MZgr1M9ixDOOlwrpL4LyDCG/CAAROkbWOgXTmYOLBJQM4CB1s3xV SuzZfJCPMIXkI1n81RY0WQj+Lyf1SMnOR1rwWF/scxsuCsfRUZsYJJPMIhRpGw== Received: from venus.codepro.be (venus.codepro.be [5.9.86.228]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mx1.codepro.be", Issuer "R3" (verified OK)) (Authenticated sender: kp) by smtp.freebsd.org (Postfix) with ESMTPSA id 4THzcq113Zz1Plp; Sun, 21 Jan 2024 16:40:59 +0000 (UTC) (envelope-from kp@FreeBSD.org) Received: by venus.codepro.be (Postfix, authenticated sender kp) id C821E46918; Sun, 21 Jan 2024 17:40:56 +0100 (CET) From: Kristof Provost To: Poul-Henning Kamp Cc: Alan Somers , George Mitchell , freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) Date: Sun, 21 Jan 2024 17:40:52 +0100 X-Mailer: MailMate (1.14r5937) Message-ID: <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> In-Reply-To: <202401211626.40LGQDim013134@critter.freebsd.dk> References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 21 Jan 2024, at 17:26, Poul-Henning Kamp wrote: > Alan Somers writes: >> * " can't be implemented unless written in rust" >> >> I don't think anybody has claimed this yet. But I _have_ made a simil= ar claim, >> that some things can't be written in C. I'll elaborate on the project= that >> started this thread: the fusefs test suite. When I designed the fusef= s test >> suite, I based it around the priniciple of Mocking. [...] > > Why would such a test-tool live in src rather than ports ? > It=E2=80=99s entirely reasonable for the test code to live in the same re= pository as the code it tests. Doing otherwise would make life harder (e.g. how do you establish if a te= st failure is expected with a given src version) for no good reason. I suspect we may be working with different views of what a test tool does= here. You may be thinking more along the lines of something like iperf, = while I=E2=80=99m thinking more of test like this one: https://cgit.freeb= sd.org/src/commit?id=3D4c84c69ba308b7758d07dc8845b13922ed667e02 I=E2=80=99ll take the opportunity to point out that there=E2=80=99s prece= dent for using non-base languages in tests (e.g. Python, for the test lin= ked above), so using Rust code for in-tree tests looks like a reasonable = way to get our toes wet, without immediately painting ourselves into a co= rner if it doesn=E2=80=99t work out. =E2=80=94 Kristof From nobody Sun Jan 21 16:44:30 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THzj52kQ1z57mGS for ; Sun, 21 Jan 2024 16:44:41 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: from gndrsh.dnsmgr.net (pdx.rh.CN85.dnsmgr.net [65.75.216.6]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THzj41qf6z41vN for ; Sun, 21 Jan 2024 16:44:40 +0000 (UTC) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Authentication-Results: mx1.freebsd.org; dkim=none; dmarc=none; spf=none (mx1.freebsd.org: domain of freebsd-rwg@gndrsh.dnsmgr.net has no SPF policy when checking 65.75.216.6) smtp.mailfrom=freebsd-rwg@gndrsh.dnsmgr.net Received: from gndrsh.dnsmgr.net (localhost [127.0.0.1]) by gndrsh.dnsmgr.net (8.13.3/8.13.3) with ESMTP id 40LGiUcc086689; Sun, 21 Jan 2024 08:44:30 -0800 (PST) (envelope-from freebsd-rwg@gndrsh.dnsmgr.net) Received: (from freebsd-rwg@localhost) by gndrsh.dnsmgr.net (8.13.3/8.13.3/Submit) id 40LGiUra086688; Sun, 21 Jan 2024 08:44:30 -0800 (PST) (envelope-from freebsd-rwg) From: "Rodney W. Grimes" Message-Id: <202401211644.40LGiUra086688@gndrsh.dnsmgr.net> Subject: Re: The Case for Rust (in the base system) In-Reply-To: <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> To: George Mitchell Date: Sun, 21 Jan 2024 08:44:30 -0800 (PST) CC: freebsd-hackers@FreeBSD.org X-Mailer: ELM [version 2.4ME+ PL121h (25)] List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII X-Spamd-Bar: -- X-Spamd-Result: default: False [-2.10 / 15.00]; AUTH_NA(1.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-0.996]; MIME_GOOD(-0.10)[text/plain]; TAGGED_RCPT(0.00)[freebsd]; ARC_NA(0.00)[]; ASN(0.00)[asn:10494, ipnet:65.75.216.0/23, country:US]; RCPT_COUNT_TWO(0.00)[2]; MIME_TRACE(0.00)[0:+]; MID_RHS_MATCH_FROM(0.00)[]; R_DKIM_NA(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@FreeBSD.org]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; TO_DN_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; DMARC_NA(0.00)[dnsmgr.net]; R_SPF_NA(0.00)[no SPF record] X-Rspamd-Queue-Id: 4THzj41qf6z41vN > On 1/21/24 02:51, Poul-Henning Kamp wrote: > > [...] > > The tools are /never/ the real problem. > > [...] > > But after I read this entire thread, the "pro" argument for Rust > > seems boil down to just "all the cool kids do it". > > [...] > > I will also "second" the comment about C++ getting to be a really > > good language, in particular if you play it like a violin: > > [...] > > Poul-Henning > > > Poul-Henning Kamp is always worth listening to. I shortened my > quotation in order to get to the real point quickly: > > +1. ++1 Long ago I learned to stand on the shoulders of giants, phk, I thank you for the shoulders! > -- George -- Rod Grimes rgrimes@freebsd.org From nobody Sun Jan 21 16:50:38 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THzr726T8z57ms9 for ; Sun, 21 Jan 2024 16:50:47 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THzr65rnpz43VQ; Sun, 21 Jan 2024 16:50:46 +0000 (UTC) (envelope-from kostikbel@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: from tom.home (kib@localhost [127.0.0.1] (may be forged)) by kib.kiev.ua (8.17.1/8.17.1) with ESMTP id 40LGocdW084017; Sun, 21 Jan 2024 18:50:41 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua 40LGocdW084017 Received: (from kostik@localhost) by tom.home (8.17.1/8.17.1/Submit) id 40LGockE084016; Sun, 21 Jan 2024 18:50:38 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sun, 21 Jan 2024 18:50:38 +0200 From: Konstantin Belousov To: Alan Somers Cc: freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) Message-ID: References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FROM, NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on tom.home X-Rspamd-Queue-Id: 4THzr65rnpz43VQ X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:6939, ipnet:2001:470::/32, country:US] On Sun, Jan 21, 2024 at 09:04:52AM -0700, Alan Somers wrote: > Wow, there have been a lot of responses. I think I touched on a > sensitive issue. I'll group everything together in one reply. TLDR; > I think imp's proposal is best. > > * Rust's ABI is too unstable to use for libraries > > This actually isn't a problem. The stability situation for the Rust ABI is > similar to C++; you can't link a C++ app to a C++ library unless they were both > built with the same compiler version. The C ABI, of course, is quite stable. > And it's very easy to build a Rust library as a cdylib so that C applications > can access it. But there are restrictions: the library's public API can't do > things that C can't, like generic functions. I do not think this paragraph is accurate. First, there is C++ ABI, that is followed by compilers, and divergences are treated as serious bugs. Second, even if you limit Rust library to C-representable features, it is still not guaranteed to have stable external ABI. You need to apply a lot of FFI powder to the interface, starting with repr(C) for types (otherwise layou is not stable) and functions name mangling control (again no guarantee for the mangling scheme stability), ending with proper types use and absence of definition what is C-compatible interface. From nobody Sun Jan 21 16:55:54 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4THzzF6RVqz57nxv for ; Sun, 21 Jan 2024 16:56:57 +0000 (UTC) (envelope-from lain@fair.moe) Received: from mail.076.ne.jp (mail.076.ne.jp [45.76.218.69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4THzzD3XH9z45Tn for ; Sun, 21 Jan 2024 16:56:56 +0000 (UTC) (envelope-from lain@fair.moe) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=076.ne.jp header.s=dkim header.b=BCmmON7D; dmarc=none; spf=none (mx1.freebsd.org: domain of lain@fair.moe has no SPF policy when checking 45.76.218.69) smtp.mailfrom=lain@fair.moe Received: from mail.076.ne.jp (localhost [127.0.0.1]) by mail.076.ne.jp (Postfix) with ESMTP id 4THzz92bd3zW42R for ; Mon, 22 Jan 2024 01:56:53 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=076.ne.jp; h= user-agent:in-reply-to:content-disposition:content-type :mime-version:references:message-id:subject:to:from:date; s= dkim; t=1705856212; x=1708448213; bh=SInVF9kAbZCBaScAZ5AB4eexIRg 8MOlpv5BiOB4aqZM=; b=BCmmON7DdFT5Z/MuH+QdoKzgpo9+mdrCNTBRIkLVgNL FkKaVxrOMotw+GHIQhYAuBIHM2VT2SB3WLJzokg/4ynObpZIB85EMz9qZfY3iL/r CLofS0BRvtkeqOqEsZCBovnHl0Ylvg1iMmVxzv5p0cRnH87r9Jb84Xn4lzBLxOuQ wfZl6f6Ho9umwha6tkiYT+oRJtTDhiows3rr1y8EuOvH5vwiGrcH91Tp4h5xWEyL /yJXebYTSQxaLSIhSjOwEOxqP5KkKb2f1SoAHVIQej5B4/gtCtIe5+fpNr5x9WNj 6ewhxKirJWi2eCYRZjjjcqGn+yPZQBxa2bvBFmbKj1Q== X-Virus-Scanned: Debian amavisd-new at guest.guest Received: from mail.076.ne.jp ([127.0.0.1]) by mail.076.ne.jp (mail.076.ne.jp [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id jNZ1hPTVxLO2 for ; Mon, 22 Jan 2024 01:56:52 +0900 (JST) Received: from mail.fair.moe (ip1.193.076.moe [219.117.254.193]) by mail.076.ne.jp (Postfix) with ESMTPSA id 4THzz81tZzzW40T for ; Mon, 22 Jan 2024 01:56:52 +0900 (JST) Date: Mon, 22 Jan 2024 01:55:54 +0900 From: "lain." To: freebsd-hackers@freebsd.org Subject: Re: Re: The Case for Rust (in the base system) Message-ID: X-Location: =?utf-8?B?IkVhcnRoL+WcsOeQgyI=?= X-Operating-System: "GNU/Linux" References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="iyijgmclpzhtuohq" Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20231221 X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.90 / 15.00]; SIGNED_PGP(-2.00)[]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; MID_RHS_NOT_FQDN(0.50)[]; R_DKIM_ALLOW(-0.20)[076.ne.jp:s=dkim]; MIME_GOOD(-0.20)[multipart/signed,text/plain]; DMARC_NA(0.00)[fair.moe]; RCVD_VIA_SMTP_AUTH(0.00)[]; ASN(0.00)[asn:20473, ipnet:45.76.192.0/19, country:US]; RCPT_COUNT_ONE(0.00)[1]; MIME_TRACE(0.00)[0:+,1:+,2:~]; R_SPF_NA(0.00)[no SPF record]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; RCVD_COUNT_THREE(0.00)[3]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_TLS_LAST(0.00)[]; DKIM_TRACE(0.00)[076.ne.jp:+] X-Rspamd-Queue-Id: 4THzzD3XH9z45Tn --iyijgmclpzhtuohq Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Interesting responses. I figured I'll give some input on those. On 2024=E5=B9=B401=E6=9C=8821=E6=97=A5 09:04, the silly Alan Somers claimed= to have said: > I think I touched on a sensitive issue. This is expected to happen, especially after the amount of controversy this already has caused on the Linux side of things. > * Why Rust instead of Perl, Java, C#, or Go? >=20 > The crucial difference between Rust and those other four, basically betwe= en > Rust and everything else since C++ [1], is that Rust is suitable for low-= level > systems programming. It lacks memory manangement, green threads, etc. T= he > runtime is small (and optionally can be removed entirely). Rust isn't qu= ite as > low-level as C, but it's in about the same position as C++. There is the borrow checker though. I haven't coded in Rust further than just the first chapter kinda level, but it theoretically sounds like instead of the burden of memory management being put on the runtime (Java, Go, C#) or on the programmer (C, C++), it's done by the compiler (Rust, Zig). > * Why not just use C++ then? >=20 > Speaking from experience, I'm far more productive in Rust than C++, and m= y code > has many fewer bugs, too. I had been using C++ professionally for 11 yea= rs > before I learned about Rust, but after 6 months my Rust skills were bette= r than > my C++ skills. That's why I finally realized that I wasn't the cause of = my C++ > problems; C++ was. In general, it feels like C++ has a cumbersome mix of > low-level and high-level features. Smart pointers, for example, are handy= =2E But > because it retains so much C-compatibility C++ can't enforce the use of s= mart > pointers. And it can't even warn against the use of dumb pointers. It > certainly can't check their lifetimes. But in Rust, all pointers are sma= rt > [2], so the compiler can help you avoid a wide range of common bugs. I know the feel man, I attempted to learn C++ so many times, only to find myself uncontiously using C instead. Actual C++ is so rich in features, I feel like you just can't learn C++ unless you've been with it since the 1980s. Rust does seem to suffer from the same problem as C++ in that features keep getting added on over time. It's quite a contrast from C or Go where the standard libraries barely change throughout their entire existence. > * Rust will go out of fashion by the 2040s >=20 > Perhaps it will. But Like David Chisnall, I'm afraid that if FreeBSD nev= er > modernizes, then it itself will go out of fashion by the 2040s. I don't really see changing languages as "modernization". In the webdev space we've seen so many "modernizations" so many times, it more often feels like this whole space is building the Tower of Babel, rather than something like a Sphinx; so a structure doomed to eventually collapse, rather than something that only loses 1 piece, but other than that survives thousands of years of history. > * " can't be implemented unless written in rust" As long as it's a real language, anything can be implemented in any real language. By the end of the day, every language eventually becomes assembly, which in turn becomes machine code, and a programming language is only there for the programmer to make him or her understand what the hell is going on. > * Rust in base would double our compile times >=20 > Yes, it would. That's the worst thing about it. Compile times could be lowered by refraining from using Cargo packages for literally everything, but from so many projects I've come across, it really seems just as impossible for Rust developers as it does for Javascript developers to refrain from using NPM packages. And this is my biggest issue with everything being turned into Rust, especially after having witnessed everything being turned into NodeJS prior. --=20 lain. Did you know that? 90% of all emails sent on a daily basis are being sent in plain text, and i= t's super easy to intercept emails as they flow over the internet? Never send passwords, tokens, personal information, or other volunerable in= formation without proper PGP encryption! If you're writing your emails unencrypted, please consider sending PGP encr= ypted emails for security reasons. You can find my PGP public key at: https://fair.moe/lain.asc Every good email client is able to send encrypted emails. If yours can't, then you should consider switching to a secure email client= , because yours just sucks. My recommendations are Claws Mail or NeoMutt. For instructions on how to encrypt your emails: https://unixsheikh.com/tutorials/gnupg-tutorial.html --iyijgmclpzhtuohq Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQGzBAEBCAAdFiEEozVhUpXECiNYIKIXtWNzC1Y29b0FAmWtTJcACgkQtWNzC1Y2 9b1pHgwAinT89YwnWapKLWqfliA4/ARxvmsLUp2FIP+Eauvd/n9mhZh4BgI5CbtQ 8K4hFY7d56NDblk+UrlesceTafm0xAH3OK3cAAFtnakzbdT/iIC3JxT/i1SZf4zK 1bAY0mSPVjRQBfvYE2xc7amw1qkgkzMf1BLQkjEqBgcrXAy5v43Q460BHzHIw7rQ 51yb98Qw2tooJgk8pLJqq38UNO8YzEJYzCXGhRYFC9FzIiElphhZ+Dy0z78hVelo WSgGcbwUNN6GJb6U/12QvwgjbNtDyRLuyNIgqRVL/HFIhhpVBkUFhPWUkuIMIuGU 3eKaQj8VTpvXrZ23f3gXABJBxHIjDoRD63+CnSNY+qUZpUda0hQQl2/z2t09E0T6 AfqUTNuqQa+JlBbqsBnkVhBM9ydwB/JPajh0cUl/GW56jVAxQFtI3gaSCLMQnyMA nMtS7V2ng3J3HkZ73xB56uiCgKlCZo6AdAX06VXxU7eUgx/qdL9ZrCpeGCpGkkF4 +nyc3DYZ =tOr9 -----END PGP SIGNATURE----- --iyijgmclpzhtuohq-- From nobody Sun Jan 21 17:13:57 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ0Lv5CS2z57KcX for ; Sun, 21 Jan 2024 17:13:59 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ0Lv2kYzz49WP; Sun, 21 Jan 2024 17:13:59 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Authentication-Results: mx1.freebsd.org; none Received: from critter.freebsd.dk (unknown [192.168.55.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phk.freebsd.dk (Postfix) with ESMTPS id 97A2D89281; Sun, 21 Jan 2024 17:13:57 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.17.1/8.16.1) with ESMTPS id 40LHDv5S025463 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sun, 21 Jan 2024 17:13:57 GMT (envelope-from phk@critter.freebsd.dk) Received: (from phk@localhost) by critter.freebsd.dk (8.17.1/8.16.1/Submit) id 40LHDv6b025462; Sun, 21 Jan 2024 17:13:57 GMT (envelope-from phk) Message-Id: <202401211713.40LHDv6b025462@critter.freebsd.dk> To: Alan Somers cc: George Mitchell , freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) In-reply-to: From: "Poul-Henning Kamp" References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <25460.1705857237.1@critter.freebsd.dk> Content-Transfer-Encoding: quoted-printable Date: Sun, 21 Jan 2024 17:13:57 +0000 X-Rspamd-Queue-Id: 4TJ0Lv2kYzz49WP X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:1835, ipnet:130.225.0.0/16, country:EU] -------- Alan Somers writes: > > Why would such a test-tool live in src rather than ports ? > > I initially considered putting it in ports just for that reason. But > it's too tightly coupled to src. The tests need to change with every > feature addition or bug fix to src. I know exactly where you come from there: I had that exact problem in Varnish too. My solution was to separate the "test-running tool" from the "test-case description", by writing the latter in a DSL interpreted by the former. One very big advantage was the almost total elimination of "boiler-plate" in the test-case descriptions. You can see a typical "complex" test-case here: https://github.com/varnishcache/varnish-cache/blob/master/bin/varnishtest= /tests/c00016.vtc But there are so many other advantages that I could talk about this for hours, but we can do that in private email if you are interested :-) I'm not saying that the exact same idea can be used to test FUSE, but IMO you should /really/ try to find a solution along those lines. So yes, I feel your plight, but it does not convince me that we need to pay the huge cost of Rust in src. -- = Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe = Never attribute to malice what can adequately be explained by incompetence= . From nobody Sun Jan 21 17:21:55 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ0X56LVzz57LVj for ; Sun, 21 Jan 2024 17:21:57 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ0X55SZRz4DKF; Sun, 21 Jan 2024 17:21:57 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Authentication-Results: mx1.freebsd.org; none Received: from critter.freebsd.dk (unknown [192.168.55.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phk.freebsd.dk (Postfix) with ESMTPS id D545F89281; Sun, 21 Jan 2024 17:21:55 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.17.1/8.16.1) with ESMTPS id 40LHLtlO025496 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sun, 21 Jan 2024 17:21:55 GMT (envelope-from phk@critter.freebsd.dk) Received: (from phk@localhost) by critter.freebsd.dk (8.17.1/8.16.1/Submit) id 40LHLtHv025495; Sun, 21 Jan 2024 17:21:55 GMT (envelope-from phk) Message-Id: <202401211721.40LHLtHv025495@critter.freebsd.dk> To: Kristof Provost cc: Alan Somers , George Mitchell , freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) In-reply-to: <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> From: "Poul-Henning Kamp" References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <25493.1705857715.1@critter.freebsd.dk> Date: Sun, 21 Jan 2024 17:21:55 +0000 X-Rspamd-Queue-Id: 4TJ0X55SZRz4DKF X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:1835, ipnet:130.225.0.0/16, country:EU] -------- Kristof Provost writes: > > Why would such a test-tool live in src rather than ports ? > > > > It's entirely reasonable for the test code to live in the same > repository as the code it tests. "reasonable" is a very wishy-washy standard :-) My view is that test-decriptions SHALL live with the code they test. But there is no particular reason why the test-tool, which interprets those test-descriptions and perform the test as described need to. Insisting they do so, also, almost by definition, limits their abilities. For instance a test-tool living in src cannot have a graphical UX. -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. From nobody Sun Jan 21 17:29:12 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ0hb0SGlz57MBl for ; Sun, 21 Jan 2024 17:29:19 +0000 (UTC) (envelope-from ihor@antonovs.family) Received: from mail.antonovs.family (mail.antonovs.family [100.25.240.195]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.antonovs.family", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ0hZ6zQBz4FVm; Sun, 21 Jan 2024 17:29:18 +0000 (UTC) (envelope-from ihor@antonovs.family) Authentication-Results: mx1.freebsd.org; none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antonovs.family; s=20200215; t=1705858154; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0ByZgNhsQiTgBGb/aAT3P06AHa5egRVVOqxGXy4btfo=; b=v3IweiGpAWYbNT+kLibkse09nZFw6glSpCcSlny+EDWTdgAUHsROaSRU7LCROAOuPwW6Gp FMpnE4Tin9hp4SybMUbk14iPLvgQ+0gYdHwIIoJ8o1suAenkwkvlKKYhxPS6CZJ1AHbTto 6f0EaC/b4hvJUnKXZBSQflNB06Pl0vY= Received: by mail.antonovs.family (OpenSMTPD) with ESMTPSA id 748323fa (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Sun, 21 Jan 2024 17:29:14 +0000 (UTC) Message-ID: Date: Sun, 21 Jan 2024 09:29:12 -0800 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Case for Rust (in the base system) Content-Language: en-US To: Alan Somers References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> From: Ihor Antonov Cc: freebsd-hackers In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 4TJ0hZ6zQBz4FVm X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:14618, ipnet:100.24.0.0/13, country:US] On 1/21/24 08:04, Alan Somers wrote: > * Why Rust instead of Perl, Java, C#, or Go? I have more interesting questions: - What are we going to do when Mojo comes out? It is a compiled superset of python that will have a better borrow checker and is going to be suitable for low-level systems development? Chris Lattner  - they guy who wrote LLVM is building it, and he says Rust's approach is not the best. There will be a new hype wave. Productivity gains from mojo *will* outshine Rust. [1] - Are we going to add python/mojo to the codebase? - Are we going to remove Rust? - It is not about Rust per-se. How many more languages can we add to the src before it becomes  an unmaintainable mess? - What is our vision and policy about languages in src? [1] https://docs.modular.com/mojo/ > * Why not just use C++ then? > > Speaking from experience, I'm far more productive in Rust than C++ Same. But I'm afraid personal productivity comes at a cost of decreasing our collective productivity. Shifting mental gears from C to Rust is hard. It is much easier to shift from C to C++ (a reasonable subset thereof). Also - have we tried using C++ as if it is C? Read what PHK writes. We don't have to use all C++ features. We don't have to learn all of C++. I have a working prototype of C++23 codebase where I write C++ as C but with - methods on structs - namespaces - modules (C++20) No STL, no templates, none of the C++ insanity. This just makes a better C. Yes, I know that defining and maintaining a "sane" C++ subset is not trivial, but it seems to be like a much better way to evolve src. > * Rust will go out of fashion by the 2040s Yes, it is only the first systems language that has borrow checker and no GC. Mojo is coming. There will be more.. ... BTW, Someone mentioned Zig and I want to develop this idea further. Zig in base is actually not a crazy idea at all! I am currently playing with Zig and ZIg is great. - It mixes with C much better than Rust. - It can be bootstrapped from vanilla LLVM. - It has conservative mindset - much closer to C and Go rather than C++ and Rust. - Productivity gains are as great as in Rust, or bigger. - Zig foundation has not been (yet) overrun by corporate overlords. > [1] Yes I know about Modula-3, D, etc. But for various reasons those > never gained traction. > [2] Dumb pointers exist too, but they're almost never used except when > binding to a C library. > [3] https://github.com/lpabon/cmockery2/blob/master/doc/usage.md > [4] https://docs.rs/mockall/latest/mockall/ > -- Ihor Antonov From nobody Sun Jan 21 19:06:04 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ2rN2cQVz57WbS for ; Sun, 21 Jan 2024 19:06:12 +0000 (UTC) (envelope-from ihor@antonovs.family) Received: from mail.antonovs.family (mail.antonovs.family [100.25.240.195]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "mail.antonovs.family", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ2rM3nJbz4WYX; Sun, 21 Jan 2024 19:06:11 +0000 (UTC) (envelope-from ihor@antonovs.family) Authentication-Results: mx1.freebsd.org; dkim=none ("invalid DKIM record") header.d=antonovs.family header.s=20200215 header.b=yTF6+vfN; dmarc=pass (policy=none) header.from=antonovs.family; spf=pass (mx1.freebsd.org: domain of ihor@antonovs.family designates 100.25.240.195 as permitted sender) smtp.mailfrom=ihor@antonovs.family DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=antonovs.family; s=20200215; t=1705863966; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=gQkhXtVSm7L8eFb5fDZrjo57GyklpoB8O0CPPGWTX3E=; b=yTF6+vfNaelITCkWqot/aE/JeUsdcBHCqCo65ZbvviCtMrrm1qa1HNKWn9pLCVJ2MMzPgU mefcSMhQLdnfAWXIjW3KV7MloeNMTNSTqACG+jwp80kp4UV+N6GFKoOdAv3JDEZwXYb0Mi FNm2GqCYFpJBI5BNUNnyM4bFmDihD0g= Received: by mail.antonovs.family (OpenSMTPD) with ESMTPSA id b2cfc5cf (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO); Sun, 21 Jan 2024 19:06:05 +0000 (UTC) Message-ID: Date: Sun, 21 Jan 2024 11:06:04 -0800 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: core@FreeBSD.org, freebsd-hackers From: Ihor Antonov Subject: The Problem Of Governance (or lack thereof) Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spamd-Bar: --- X-Spamd-Result: default: False [-3.77 / 15.00]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_MEDIUM(-1.00)[-0.998]; NEURAL_HAM_SHORT(-0.99)[-0.985]; DMARC_POLICY_ALLOW(-0.50)[antonovs.family,none]; R_SPF_ALLOW(-0.20)[+mx]; MIME_GOOD(-0.10)[text/plain]; XM_UA_NO_VERSION(0.01)[]; R_DKIM_PERMFAIL(0.00)[antonovs.family:s=20200215]; ASN(0.00)[asn:14618, ipnet:100.24.0.0/13, country:US]; RCVD_TLS_ALL(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_COUNT_ONE(0.00)[1]; TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[]; MID_RHS_MATCH_FROM(0.00)[]; RCPT_COUNT_TWO(0.00)[2]; FROM_HAS_DN(0.00)[]; ARC_NA(0.00)[]; FROM_EQ_ENVFROM(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; TO_MATCH_ENVRCPT_ALL(0.00)[]; DKIM_TRACE(0.00)[antonovs.family:~] X-Rspamd-Queue-Id: 4TJ2rM3nJbz4WYX I am starting a new thread because "The Case for Rust" is already too big, and the questions I am about to ask here are not about Rust. This is going to be a bit philosophical and I think more important than any concrete I have *intentionally* added CORE team to the address list. Our official website says > Core Team constitutes the project’s "Board of Directors", responsible for deciding the project’s overall goals and direction as well as managing specific areas of the FreeBSD project landscape. [1] or here [2] > The FreeBSD Core Team is the governing body of FreeBSD. The "Case for Rust" ml thread has re-surfaced a lot of *very important* questions that do require a governing body to actually do its work - to govern, to produce decisions. This is hard and someone has to take the responsibility. The question whether to add Rust to src immediately begs more questions: - Why Rust? - Why now? - Do we even need more languages in base? - What is wrong with current languages available? - Does it mean we are going add the next hype tech to the base too? Any answer given to these questions immediately brings a new set of questions: - What is the framework (set of principles) we used to answer these questions? - Do we even have such a framework? Or will tomorrow we change our mind because different mood strikes? At the *core* (pun intended) there are fundamental questions that must be answered. Every living being (a human or a society) needs a vision of the future to live and make progress. Remove the coherent vision of future and the direction of growth becomes Brownian motion [3]. Deny the possibility of the future at all and any living being dies (that is why animals in the zoo tend to live shorter despite living with everything provided) Does FreeBSD has a vision of the future? It is not enough to say what we are doing, it is also necessary to say how we are doing it and why we doing it. Because we have no solid answers to these questions explaining that FreeBSD is not a linux distro to an outside observer becomes challenging. What really differentiates us from Linux? The license sticker? in-tree ZFS? Stagnation-borderline conservatism? These are pretty shallow answers, we need to do better. Remember any light-bulb epiphany moment you had. Suddenly you get this idea and you are full of energy to go try it out. This happens when we have crystalized an idea - a vision of the future. Coherent vision of the future gives energy to go make that future a reality. Absolutely the same thing happens with communities - you get solid vision of the future and new contributors come. FreeBSD has a problem with attracting new contributors because we don't have a solid vision of the future. All of us use FreeBSD for our reasons, but are those the same reasons for everyone? Collectively we don't have a common vision. That is why becoming a src contributor is such a difficult process. "Just find something you like to work on and do it" is not enough. Will my work be needed? Who needs it? What is the point of all this? Linux already has it, does it meant we also need to have it? A thread in the mailing list has no resolution or consensus, and it is never "over". We need better mechanisms for policy making. Lucky for us we have the core team which is a governing body. So I want to ask the core team these questions: - What is the technical direction of the FreeBSD project? Where do we go? Why do we go there? - What is the policy on programming languages in base? Sub questions:     - Are we adding every trending tech?     - Do were ever remove it when better tech is available?     - How many languages is too many? DO we have an upper limit on language count?     - What problems exist today that existing languages can't solve? Is it a skill issue of a given individual (This is not a dig at Alan) or is this a mass effect that allows us to admit that certain tech is not good enough? I am a full-time FreeBSD user (both desktop and servers) since 2017. To me, and to many other community members as I am sure Core does not really exist. Can I see what core is doing? Can I hear what core is saying? I'm afraid the answers are negative. It would be great if we can hear from Core on such important matters ever now and then. FreeBSD is by-and-large is a community of oldfarts (me including) who decided to hide from the future in this cozy little project that moves slowly and does not ask existential questions very often. But we can't hide from the future forever. Without new contributors the project will go into oblivion sooner then we can imagine. We need solid answers on question: - Who are we? - What do we do? - Why we do it? - How we do it? FreeBSD as a collective group has identity problem because we can't answer these questions. I propose to conduct a poll on these 4 questions just to see how incoherent the answers will be. FreeBSD as a technical project and a community needs technical governance to set the identity and direction. I can't think of a better time for the Core Team to step up lead. [1] https://www.freebsd.org/administration/#t-core [2] https://www.freebsd.org/status/report-2023-01-2023-03/core/ [3] https://en.wikipedia.org/wiki/Brownian_motion -- Ihor Antonov From nobody Sun Jan 21 19:14:20 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ3291Gl6z57YZB for ; Sun, 21 Jan 2024 19:14:41 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Received: from mailhost.m5p.com (mailhost.m5p.com [74.104.188.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "m5p.com", Issuer "R3" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ3286Vwvz4Y0s; Sun, 21 Jan 2024 19:14:40 +0000 (UTC) (envelope-from george+freebsd@m5p.com) Authentication-Results: mx1.freebsd.org; none Received: from [IPV6:2001:470:1f07:15ff::26] (court.m5p.com [IPv6:2001:470:1f07:15ff:0:0:0:26]) (authenticated bits=0) by mailhost.m5p.com (8.17.1/8.15.2) with ESMTPSA id 40LJEKP2057543 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sun, 21 Jan 2024 14:14:26 -0500 (EST) (envelope-from george+freebsd@m5p.com) Message-ID: <3450b677-bb20-4409-a9a3-70a84c710e11@m5p.com> Date: Sun, 21 Jan 2024 14:14:20 -0500 List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: The Problem Of Governance (or lack thereof) Content-Language: en-US To: Ihor Antonov , core@FreeBSD.org, freebsd-hackers References: From: George Mitchell Autocrypt: addr=george+freebsd@m5p.com; keydata= xjMEZaHDbxYJKwYBBAHaRw8BAQdA2W6oBfS8haXY0/Ft4zS1OTLYfC8EBIADPTgMQdh85C3N KEdlb3JnZSBNaXRjaGVsbCA8Z2VvcmdlK2ZyZWVic2RAbTVwLmNvbT7CmQQTFgoAQRYhBDpv v9n4+UzMLAJ8EZocD3futmd9BQJlocSiAhsDBQkFo5qABQsJCAcCAiICBhUKCQgLAgQWAgMB Ah4HAheAAAoJEJocD3futmd9SxwBAJUi6DNdVhWCZBTv5XGy1g0JgApLWe/3S0M0zz9sn7/L AQCcJcV5k5s2rt9J5C1AUm6XVsuneVvIWXO5j1GKWk0NC844BGWhw28SCisGAQQBl1UBBQEB B0AaFz/6B95RRvjOdLZr5fSdhuIHvwr24H3ePDZSw6wlUwMBCAfCfgQYFgoAJhYhBDpvv9n4 +UzMLAJ8EZocD3futmd9BQJlocNvAhsMBQkFo5qAAAoJEJocD3futmd9RXsBANwRD9RE56F6 /jeZOrujHICLcgPiOt50Y6866v9OUTjUAP9GlC1aopfBpNwuPLJBam7oBaGqvY98VDhzOjoT 7DNbCQ== In-Reply-To: Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------WUF4F4lXJY3v0kZlvkgIF0eO" X-Spam-Status: No, score=0.2 required=10.0 tests=HELO_MISC_IP,HELO_NO_DOMAIN autolearn=no autolearn_force=no version=4.0.0 X-Spam-Checker-Version: SpamAssassin 4.0.0 (2022-12-14) on mattapan.m5p.com X-Rspamd-Queue-Id: 4TJ3286Vwvz4Y0s X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_FROM(0.00)[freebsd]; ASN(0.00)[asn:701, ipnet:74.104.0.0/16, country:US] This is an OpenPGP/MIME signed message (RFC 4880 and 3156) --------------WUF4F4lXJY3v0kZlvkgIF0eO Content-Type: multipart/mixed; boundary="------------1xOlEhcsvhk1lqoG6J2n0avK"; protected-headers="v1" From: George Mitchell To: Ihor Antonov , core@FreeBSD.org, freebsd-hackers Message-ID: <3450b677-bb20-4409-a9a3-70a84c710e11@m5p.com> Subject: Re: The Problem Of Governance (or lack thereof) References: In-Reply-To: --------------1xOlEhcsvhk1lqoG6J2n0avK Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: base64 T24gMS8yMS8yNCAxNDowNiwgSWhvciBBbnRvbm92IHdyb3RlOg0KPiBJIGFtIHN0YXJ0aW5n IGEgbmV3IHRocmVhZCBiZWNhdXNlICJUaGUgQ2FzZSBmb3IgUnVzdCIgaXMgYWxyZWFkeSB0 b28gDQo+IGJpZywgYW5kIHRoZSBxdWVzdGlvbnMgSSBhbSBhYm91dCB0byBhc2sgaGVyZSBh cmUgbm90IGFib3V0IFJ1c3QuIFRoaXMgDQo+IGlzIGdvaW5nIHRvIGJlIGEgYml0IHBoaWxv c29waGljYWwgYW5kIEkgdGhpbmsgbW9yZSBpbXBvcnRhbnQgdGhhbiBhbnkgDQo+IGNvbmNy ZXRlDQo+IA0KPiBJIGhhdmUgKmludGVudGlvbmFsbHkqIGFkZGVkIENPUkUgdGVhbSB0byB0 aGUgYWRkcmVzcyBsaXN0Lg0KPiBPdXIgb2ZmaWNpYWwgd2Vic2l0ZSBzYXlzDQo+IA0KPiAg PiBDb3JlIFRlYW0gY29uc3RpdHV0ZXMgdGhlIHByb2plY3TigJlzICJCb2FyZCBvZiBEaXJl Y3RvcnMiLCByZXNwb25zaWJsZSANCj4gZm9yIGRlY2lkaW5nIHRoZSBwcm9qZWN04oCZcyBv dmVyYWxsIGdvYWxzIGFuZCBkaXJlY3Rpb24gYXMgd2VsbCBhcyANCj4gbWFuYWdpbmcgc3Bl Y2lmaWMgYXJlYXMgb2YgdGhlIEZyZWVCU0QgcHJvamVjdCBsYW5kc2NhcGUuIFsxXQ0KPiAN Cj4gb3IgaGVyZSBbMl0NCj4gDQo+ICA+IFRoZSBGcmVlQlNEIENvcmUgVGVhbSBpcyB0aGUg Z292ZXJuaW5nIGJvZHkgb2YgRnJlZUJTRC4NCj4gDQo+IFRoZSAiQ2FzZSBmb3IgUnVzdCIg bWwgdGhyZWFkIGhhcyByZS1zdXJmYWNlZCBhIGxvdCBvZiAqdmVyeSBpbXBvcnRhbnQqIA0K PiBxdWVzdGlvbnMgdGhhdCBkbyByZXF1aXJlIGEgZ292ZXJuaW5nIGJvZHkgdG8gYWN0dWFs bHkgZG8gaXRzIHdvcmsgLSB0byANCj4gZ292ZXJuLCB0byBwcm9kdWNlIGRlY2lzaW9ucy4g VGhpcyBpcyBoYXJkIGFuZCBzb21lb25lIGhhcyB0byB0YWtlIHRoZSANCj4gcmVzcG9uc2li aWxpdHkuDQo+IA0KPiBUaGUgcXVlc3Rpb24gd2hldGhlciB0byBhZGQgUnVzdCB0byBzcmMg aW1tZWRpYXRlbHkgYmVncyBtb3JlIHF1ZXN0aW9uczoNCj4gDQo+IC0gV2h5IFJ1c3Q/DQo+ IC0gV2h5IG5vdz8NCj4gLSBEbyB3ZSBldmVuIG5lZWQgbW9yZSBsYW5ndWFnZXMgaW4gYmFz ZT8NCk15IHZvdGUgaGVyZSB3b3VsZCBiZSBuby4NCj4gLSBXaGF0IGlzIHdyb25nIHdpdGgg Y3VycmVudCBsYW5ndWFnZXMgYXZhaWxhYmxlPw0KPiAtIERvZXMgaXQgbWVhbiB3ZSBhcmUg Z29pbmcgYWRkIHRoZSBuZXh0IGh5cGUgdGVjaCB0byB0aGUgYmFzZSB0b28/DQpJIHN0cm9u Z2x5IGhvcGUgbm90IQ0KPiANCj4gWy4uLiBtdWNoIGdvb2QgbWF0ZXJpYWwgb24gdGhlIGFi b3ZlIGlzc3VlcyAuLi5dDQo+IFdlIG5lZWQgc29saWQgYW5zd2VycyBvbiBxdWVzdGlvbjoN Cj4gLSBXaG8gYXJlIHdlPw0KPiAtIFdoYXQgZG8gd2UgZG8/DQo+IC0gV2h5IHdlIGRvIGl0 Pw0KPiAtIEhvdyB3ZSBkbyBpdD8NCj4gWy4uLl0NCj4gWzFdIGh0dHBzOi8vd3d3LmZyZWVi c2Qub3JnL2FkbWluaXN0cmF0aW9uLyN0LWNvcmUNCj4gWzJdIGh0dHBzOi8vd3d3LmZyZWVi c2Qub3JnL3N0YXR1cy9yZXBvcnQtMjAyMy0wMS0yMDIzLTAzL2NvcmUvDQo+IFszXSBodHRw czovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Ccm93bmlhbl9tb3Rpb24NCj4gDQpHb29kIGx1 Y2sgd2l0aCB5b3VyIHBvbGwuICBJIHdpbGxpbmdseSBzdWJzdGl0dXRlIHRoZSBDb3JlIFRl YW0gYXMgbXkNCnByb3h5IHRvIGFuc3dlciB5b3VyIHF1ZXN0aW9ucywgYmVjYXVzZSBJIGJl bGlldmUgdGhlaXIgcmVsYXRpdmUNCmludmlzaWJpbGl0eSBpcyB0aGUgc3Ryb25nZXN0IG1h cmtlciBvZiB0aGVpciBzdWNjZXNzLiAgQ29yZSBUZWFtLCB5b3UNCmFyZSBkb2luZyBhIGdv b2Qgam9iLCBhdCBsZWFzdCBpbiBteSBodW1ibGUgb3BpbmlvbiEgICAgICAgIC0tIEdlb3Jn ZQ0K --------------1xOlEhcsvhk1lqoG6J2n0avK-- --------------WUF4F4lXJY3v0kZlvkgIF0eO Content-Type: application/pgp-signature; name="OpenPGP_signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="OpenPGP_signature.asc" -----BEGIN PGP SIGNATURE----- wnsEABYIACMWIQQ6b7/Z+PlMzCwCfBGaHA937rZnfQUCZa1tDAUDAAAAAAAKCRCaHA937rZnfV8W AQDkxc3br8ch1HhgRz2t1aQy5JbCfnkO2J8ghm4Vzg8HsgD/e8MelvPboJnfrmFObnJXz74IeoZV 15uGIyK3UhQ9Lg0= =5Z69 -----END PGP SIGNATURE----- --------------WUF4F4lXJY3v0kZlvkgIF0eO-- From nobody Sun Jan 21 19:28:32 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ3LD6tJBz57Zl7 for ; Sun, 21 Jan 2024 19:28:36 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ3LD4gCGz4d1l; Sun, 21 Jan 2024 19:28:36 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Authentication-Results: mx1.freebsd.org; none Received: from critter.freebsd.dk (unknown [192.168.55.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phk.freebsd.dk (Postfix) with ESMTPS id 1DDEC89281; Sun, 21 Jan 2024 19:28:34 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.17.1/8.16.1) with ESMTPS id 40LJSXqa095288 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sun, 21 Jan 2024 19:28:33 GMT (envelope-from phk@critter.freebsd.dk) Received: (from phk@localhost) by critter.freebsd.dk (8.17.1/8.16.1/Submit) id 40LJSWnE095287; Sun, 21 Jan 2024 19:28:32 GMT (envelope-from phk) Message-Id: <202401211928.40LJSWnE095287@critter.freebsd.dk> To: Ihor Antonov cc: core@FreeBSD.org, freebsd-hackers Subject: Re: The Problem Of Governance (or lack thereof) In-reply-to: From: "Poul-Henning Kamp" References: List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <95285.1705865312.1@critter.freebsd.dk> Date: Sun, 21 Jan 2024 19:28:32 +0000 X-Rspamd-Queue-Id: 4TJ3LD4gCGz4d1l X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; ASN(0.00)[asn:1835, ipnet:130.225.0.0/16, country:EU] Ihor Antonov writes: > I am a full-time FreeBSD user (both desktop and servers) since 2017. To > me, and to many other community members as I am sure Core does not > really exist. Core is not the "Board of Directors", who makes all the hard decisions, and everybody else shuts up and codes in the direction they are told to. Core is more of a "General Secretary" function, who's job it is to keep the meeting in order, provide paper, pencils and refreshments, and diplomatically try to facilitate the delegates reaching some kind of consensus, or if they cannot, to credibly count the votes. As to Rust in src, the meeting is still ongoing, intelligent and informed opinions and arguments are being exchanged, so core@ is probably leaning back, enjoying the sound of a project humming along just the way core@ likes it to... Poul-Henning -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. From nobody Sun Jan 21 19:52:04 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ3sW1x5lz57cKM for ; Sun, 21 Jan 2024 19:52:15 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-ed1-x52f.google.com (mail-ed1-x52f.google.com [IPv6:2a00:1450:4864:20::52f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ3sV50xPz4hS3 for ; Sun, 21 Jan 2024 19:52:14 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ed1-x52f.google.com with SMTP id 4fb4d7f45d1cf-55a87dfc3b5so1340632a12.3 for ; Sun, 21 Jan 2024 11:52:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705866733; x=1706471533; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=rFxVAqoAQ6hMiTWUHBw1nE9DLkd23Ws8wEj3wt/5zik=; b=LHAznMlIZYFnDJYgnz6bPQNp9P2X2XbWlOgIVtN+289+6HbqJL1UwcjbZHw+QxRY41 E5QCmS66zzaU9TPOT4ARkfq2AyFos96zQLZ6lx82va8hFmQa8FLFXXGUyuP7vm1BKq1V JqoLHkqupDI0Y8fMPs6Tpvm2n0sl7Psrr6pcirFdVOEup3m4As4jJdxjWqS4i8wuZxLn ZYLcOzZHUqIDXEtbnQ27Ay/MW/DsJpys9u50ZNMBLDEvG/Sv9aEHEr+IHHBMF6hSM9UC DlwzA9VavStQm2Q4XQ+85T27JYY4Tf18eR6ZPX5VRsHBC++PMOGVDzudP7mSpcV1qV79 D8vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705866733; x=1706471533; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=rFxVAqoAQ6hMiTWUHBw1nE9DLkd23Ws8wEj3wt/5zik=; b=H3YgPeOaeHq79UEUlLKNFtiGxjjg47OkpeCgF/PH3RkxP/wqn/HAEiitkQMNaDwDBN V/QGH9ZAa68JGIVr75TM69g5s8dfmoyhH9SNiO0YouM2Wb+qdIs2oVXoT0WkSCxF06DZ CdXzyeqwyPLTk4uBD2oQrRr8afAyMzDhh//kP9gY7tAELOdTKbi4G45QjRgKP4B95VFH zt4FRc+cpZcX/DwS/t0kMFDrvbKlg3is5L0xLjkwYYaHIvYH0Rw1JmvxQAYDjHuBQNiT m4qz8/sE6S299hjnbU11rVZZR+4h5oq4gK2jjxGhJPbaTlbGqnKyAELj1h/eqz+JX6Y4 eWeA== X-Gm-Message-State: AOJu0Yxivjq9513cs8/s/3d0c5O7X3DOLbSbfviKWvCBQJC4OBv7LPk2 ZB2u5xrndlmkRIMUzKW9/PB4R/2qojZep/Wd6FcSd4szlK7L+iqsJyDuHHaHKcaGfJRlfL/X6zp 1tON6tTX7SbtlsH6+wLLzx3+rzFGnOLlXfiq99g== X-Google-Smtp-Source: AGHT+IFUQMku7bB7dVZd5XJjhHJYjT/WbYkb2qT+GDd1l8UtBA0DT4iRdfGArTAZF+9oH1MiyjW/MAiMWk9lVcNWrSk= X-Received: by 2002:aa7:c553:0:b0:55a:db1:3bf7 with SMTP id s19-20020aa7c553000000b0055a0db13bf7mr1626621edr.26.1705866733347; Sun, 21 Jan 2024 11:52:13 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> In-Reply-To: <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> From: Warner Losh Date: Sun, 21 Jan 2024 12:52:04 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Kristof Provost Cc: Poul-Henning Kamp , Alan Somers , George Mitchell , freebsd-hackers@freebsd.org Content-Type: multipart/alternative; boundary="000000000000acf412060f7a0c63" X-Rspamd-Queue-Id: 4TJ3sV50xPz4hS3 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000acf412060f7a0c63 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jan 21, 2024 at 9:41=E2=80=AFAM Kristof Provost wr= ote: > On 21 Jan 2024, at 17:26, Poul-Henning Kamp wrote: > > Alan Somers writes: > >> * " can't be implemented unless written in rust" > >> > >> I don't think anybody has claimed this yet. But I _have_ made a > similar claim, > >> that some things can't be written in C. I'll elaborate on the project > that > >> started this thread: the fusefs test suite. When I designed the fusef= s > test > >> suite, I based it around the priniciple of Mocking. [...] > > > > Why would such a test-tool live in src rather than ports ? > > > It=E2=80=99s entirely reasonable for the test code to live in the same re= pository > as the code it tests. > > Doing otherwise would make life harder (e.g. how do you establish if a > test failure is expected with a given src version) for no good reason. > > I suspect we may be working with different views of what a test tool does > here. You may be thinking more along the lines of something like iperf, > while I=E2=80=99m thinking more of test like this one: > https://cgit.freebsd.org/src/commit?id=3D4c84c69ba308b7758d07dc8845b13922= ed667e02 > > I=E2=80=99ll take the opportunity to point out that there=E2=80=99s prece= dent for using > non-base languages in tests (e.g. Python, for the test linked above), so > using Rust code for in-tree tests looks like a reasonable way to get our > toes wet, without immediately painting ourselves into a corner if it > doesn=E2=80=99t work out. > Exactly. There will be 0 rust in base until we can build rust binaries in some way. I maintain that the first step for that is using a curated external toolchain. Tests are a good place to start because they let us stand up the tooling we need for rust, find out what the problems are, and maybe get something useful too w/o committing "all in" to rust. It's the put up or shut up moment: If the rust advocate can't be bothered to even stand this up (and I'm happy to help with that effort for the build bits) then there will be 0 rust in base because nobody cared. If that is stood up and we get tests, we'll have more data to know if it is wise to expand the experiment or close it down. In addition to being in line with tests in Python, this is in line with adapting risky technology that we've done in the past: We tried it out, kept what worked and junked what didn't. It's a risk for those wanting rust: it may be a failed experiment in which case their time is wasted. The hypothesis is that rust is useful and that tests written in rust will be easier / faster / better enough to justify the extra hassle. Let's test that hypothesis. Tests are easy enough to rewrite or do without should that hypothesis prove to be flawed. Even if all the cool kids are doing it, it doesn't mean the cool kids are wrong. We should not reject the hypothesis on that basis alone. The only way to know is to try it out and there's enough out-of-tree rust things in ports to suggest the next logical step is to put the hooks in needed to use an external toolchain to build something. This is a watered down version of write cvsupd, to be honest, but one that's testable, measurable, specific and finite. It gives us data for any follow on choices. Warner --000000000000acf412060f7a0c63 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Sun, Jan 21, 2024 at 9:41=E2=80=AF= AM Kristof Provost <kp@freebsd.org= > wrote:
On 2= 1 Jan 2024, at 17:26, Poul-Henning Kamp wrote:
> Alan Somers writes:
>> * "<something> can't be implemented unless written = in rust"
>>
>> I don't think anybody has claimed this yet.=C2=A0 But I _have_= made a similar claim,
>> that some things can't be written in C.=C2=A0 I'll elabora= te on the project that
>> started this thread: the fusefs test suite.=C2=A0 When I designed = the fusefs test
>> suite, I based it around the priniciple of Mocking. [...]
>
> Why would such a test-tool live in src rather than ports ?
>
It=E2=80=99s entirely reasonable for the test code to live in the same repo= sitory as the code it tests.

Doing otherwise would make life harder (e.g. how do you establish if a test= failure is expected with a given src version) for no good reason.

I suspect we may be working with different views of what a test tool does h= ere. You may be thinking more along the lines of something like iperf, whil= e I=E2=80=99m thinking more of test like this one: https://cgit.freebsd.org/src/commit?id=3D= 4c84c69ba308b7758d07dc8845b13922ed667e02

I=E2=80=99ll take the opportunity to point out that there=E2=80=99s precede= nt for using non-base languages in tests (e.g. Python, for the test linked = above), so using Rust code for in-tree tests looks like a reasonable way to= get our toes wet, without immediately painting ourselves into a corner if = it doesn=E2=80=99t work out.

Exactly. T= here will be 0 rust in base until we can build rust binaries in some way. I= maintain that the first step for that is using a curated external toolchai= n. Tests are a good place to start because they let us stand up the tooling= we need for rust, find out what the problems are, and maybe get something = useful too w/o committing "all in" to rust. It's the put up o= r shut up moment: If the rust advocate can't be bothered to even stand = this up (and I'm happy to help with that effort for the build bits) the= n there will be 0 rust in base because nobody cared. If that is stood up an= d we get tests, we'll have more data to know if it is wise to expand th= e experiment or close it down. In addition to being in line with tests in P= ython, this is in line with adapting risky technology that we've done i= n the past: We tried it out, kept what worked and junked what didn't. I= t's a risk for those wanting rust: it may be a failed experiment in whi= ch case their time is wasted. The hypothesis is that rust is useful and tha= t tests written in rust will be easier / faster / better enough to justify = the extra hassle. Let's test that hypothesis. Tests are easy enough to = rewrite or do without should that hypothesis prove to be flawed.
=
Even if all the cool kids are doing it, it doesn't mean = the cool kids are wrong. We should not reject the hypothesis on that basis = alone. The only way to know is to try it out and there's enough out-of-= tree rust things in ports to suggest the next logical step is to put the ho= oks in needed to use an external toolchain to build something. This is a wa= tered down version of write cvsupd, to be honest, but one that's testab= le, measurable, specific and finite. It gives us data for any follow on cho= ices.

Warner
--000000000000acf412060f7a0c63-- From nobody Sun Jan 21 20:13:01 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ4KX5RKfz57fCP for ; Sun, 21 Jan 2024 20:13:04 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Received: from phk.freebsd.dk (phk.freebsd.dk [130.225.244.222]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ4KX2ThTz4mNM; Sun, 21 Jan 2024 20:13:03 +0000 (UTC) (envelope-from phk@critter.freebsd.dk) Authentication-Results: mx1.freebsd.org; none Received: from critter.freebsd.dk (unknown [192.168.55.3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by phk.freebsd.dk (Postfix) with ESMTPS id EFCF889281; Sun, 21 Jan 2024 20:13:01 +0000 (UTC) Received: from critter.freebsd.dk (localhost [127.0.0.1]) by critter.freebsd.dk (8.17.1/8.16.1) with ESMTPS id 40LKD1tx095507 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NO); Sun, 21 Jan 2024 20:13:01 GMT (envelope-from phk@critter.freebsd.dk) Received: (from phk@localhost) by critter.freebsd.dk (8.17.1/8.16.1/Submit) id 40LKD1a7095506; Sun, 21 Jan 2024 20:13:01 GMT (envelope-from phk) Message-Id: <202401212013.40LKD1a7095506@critter.freebsd.dk> To: Warner Losh cc: Kristof Provost , Alan Somers , George Mitchell , freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) In-reply-to: From: "Poul-Henning Kamp" References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <95504.1705867980.1@critter.freebsd.dk> Date: Sun, 21 Jan 2024 20:13:01 +0000 X-Rspamd-Queue-Id: 4TJ4KX2ThTz4mNM X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:1835, ipnet:130.225.0.0/16, country:EU] -------- Warner Losh writes: > Even if all the cool kids are doing it, it doesn't mean the cool kids are > wrong. We should not reject the hypothesis on that basis alone. I certainly didn't mean to imply that, my point about cvsup was precisely that the proof of the pudding is in the eating. The only comment I want to add, is that the test-cases should be expressed such that, if/when we find out Rust wasn't God's gift to programmers, we can reimplement the tool which interprets them in some hot-language-du-jour, without having to rewrite all the actual test-cases. -- Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 phk@FreeBSD.ORG | TCP/IP since RFC 956 FreeBSD committer | BSD since 4.3-tahoe Never attribute to malice what can adequately be explained by incompetence. From nobody Sun Jan 21 21:04:20 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ5Sx5pqwz57l6b for ; Sun, 21 Jan 2024 21:04:33 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-ua1-f44.google.com (mail-ua1-f44.google.com [209.85.222.44]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ5Sx3cHpz43rq; Sun, 21 Jan 2024 21:04:33 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-ua1-f44.google.com with SMTP id a1e0cc1a2514c-7d2a67daa25so744340241.0; Sun, 21 Jan 2024 13:04:33 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705871072; x=1706475872; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3MIuRuOefXwb9LcYrtteU7dflxv0rYHm6tYXjpeAwos=; b=WdWgojCi8axHmOCUVsVXlPq31iUNraACSgUzROQQUZxtM7l5uPW3R9zLivgtx7X5KE aNw3xv6CK7LNFKS2+Nen5dtALYyZSIhjORoOPFAeXwTmAQiOXtNN8xJTRnOEKgU1aPbk sjOuM4o2X8fVQvEujhWJ9F75ENjw34jhfnZzL5z95ZiZAHMRdeGUvqKWMrkqaLHe4SUp 6RZysm9+eeF7iM6Wflx5HC/CKG8vsXvxZzrFY4qtTNfY9+HQyskWWnWtoSWC1dQykLON FLLyuTHyPI5f/y1QEf7BsjVKgxxILwfz2vrJaL0nrHSrJk6eqI71KySOi0XZSu0VIXOi g/EQ== X-Gm-Message-State: AOJu0Yz8rGBF07Op3uF0ka8tE4fdOKsA+cza6QAdulvTkk4R183gxokh pv8bORGVZeOkXAmIrBRVhC4PtbjSbQi6RjeFGppoeC3Co5KJAt5KFQiVwvLgBYBXX1+MoU7dT93 4leAficcfHg2yGaLE6ZX0ik5SOWCNByJE X-Google-Smtp-Source: AGHT+IHt3YobldrAhEDHkKQCtGLsW+gU4pqFBw8cfZxp7ggbfjiHJ5TcfecSY9KpP0lwdd0Cop0nUO3tSxwF8Hq59zM= X-Received: by 2002:a67:f48f:0:b0:469:a26c:cd40 with SMTP id o15-20020a67f48f000000b00469a26ccd40mr1344036vsn.71.1705871072599; Sun, 21 Jan 2024 13:04:32 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> <202401212013.40LKD1a7095506@critter.freebsd.dk> In-Reply-To: <202401212013.40LKD1a7095506@critter.freebsd.dk> From: Alan Somers Date: Sun, 21 Jan 2024 14:04:20 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Poul-Henning Kamp Cc: Warner Losh , Kristof Provost , George Mitchell , freebsd-hackers@freebsd.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TJ5Sx3cHpz43rq X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Sun, Jan 21, 2024 at 1:13=E2=80=AFPM Poul-Henning Kamp wrote: > > -------- > Warner Losh writes: > > > Even if all the cool kids are doing it, it doesn't mean the cool kids a= re > > wrong. We should not reject the hypothesis on that basis alone. > > I certainly didn't mean to imply that, my point about cvsup was precisely > that the proof of the pudding is in the eating. > > The only comment I want to add, is that the test-cases should be > expressed such that, if/when we find out Rust wasn't God's gift to > programmers, we can reimplement the tool which interprets them in > some hot-language-du-jour, without having to rewrite all the actual > test-cases. I think imp and phk are after different things. phk wants a tool written in Rust that be installed from ports and interpret test cases defined in src. That's similar to the fsx tests, which I'm planning to add to src once the package builder catches up. But imp wants test cases that are actually written in Rust and which live in src, to test his external toolchain proposal. That's very different. It's an unusual requirement. Off hand I can't think of many subsystems that are a good match for a test suite like that. ypclnt(3) might be one. From nobody Sun Jan 21 21:31:56 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ64p27TSz57n3q for ; Sun, 21 Jan 2024 21:32:10 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-lj1-x234.google.com (mail-lj1-x234.google.com [IPv6:2a00:1450:4864:20::234]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ64p0RBQz46k5 for ; Sun, 21 Jan 2024 21:32:10 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-lj1-x234.google.com with SMTP id 38308e7fff4ca-2cdeb80fdfdso26421781fa.2 for ; Sun, 21 Jan 2024 13:32:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705872727; x=1706477527; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=ospt07Q/btj4JubwI6mVnyoxM1rRJIWDzwjww63rUtg=; b=WNjcsmijOMR4tRtsL5HKvpzirUj0rPzzphSbvpII6GkIFAwRrmLAMKYnANILQwm+Kq vD0OYeQ8WQR8ll8CmueQi2bnOKmwUus8/wtvufFMn8Kz8i6MXaYC2tYqSKYjSaSYt9Ao 25oygHkBCZXZKw+4bjtnN7z3mK9Tkma3F5JmEubRrWSk7z6SXR2cxnzEzQNEW3R8LvZl UDQeb1TtUPreqY1/XeSjyZgDEW4XbRW1ysbXjkPp/sb/vwtEGcSNGWcCnBc7jSt7rjpb udydYwq/TRiB1U0bXwvUYtoHbGrsym4acMh1wZA89gNbJbQAO8G88qVqFJfzmCawXrQ6 hT1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705872727; x=1706477527; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ospt07Q/btj4JubwI6mVnyoxM1rRJIWDzwjww63rUtg=; b=Bf4ekK6sl9ninm3soKzEIK5p+xqpT3vRR2ZmyEi2JSJrrrxJCUNz3j5Fp4rwoe4opR nzxLi38E6y9eshMtqR6MNuITU/OocYNnitrBJ4usTJk3avkkII/NF7D1CGXFO9vBPTW+ EbF5can6NKAEKfEoR1hPHs1SsbDCrwyJac7GmmdmLwUPxS+FAyTnT82sXgSXxLVOJAXd jzH9G2FLEcbnVhDnm0ALg6qaVPR4UBAdUBEjSdLQwEe4FvMoyxHc2GWlNnKxotPUKVYo gfW3MSMj03/FHOdq0zKHaP+HXqnyaCEbkN4WMGe5at1dyscvJdSSxlSodaCmTlGrNR2x uIZg== X-Gm-Message-State: AOJu0YyQtsXnx9qfGXNV+BexSdOuppucAvFUVQWt1p+W3FSADZ+FSdG7 Mq8CieorXGCCCGhV3rFIKm9AtWdKtJKIPwojg6UXi9ShmqaJQ0UZkHRiB64fMYb/TMwmAarnC0x Se02NUdjFed1qft8pDpqk3444hnQeo47yiWX/ZA== X-Google-Smtp-Source: AGHT+IGoLoONsLLiO6IzrjBybtCVmTvkX4i81m3fHaDBQ45Zefaeb26Dcz4NXXCN3cgbJOdvZ1bgolD0xFTVCQr+R40= X-Received: by 2002:a2e:9942:0:b0:2cd:fbe5:667a with SMTP id r2-20020a2e9942000000b002cdfbe5667amr509579ljj.143.1705872726122; Sun, 21 Jan 2024 13:32:06 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> <202401212013.40LKD1a7095506@critter.freebsd.dk> In-Reply-To: From: Warner Losh Date: Sun, 21 Jan 2024 14:31:56 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Alan Somers Cc: Poul-Henning Kamp , Kristof Provost , George Mitchell , FreeBSD Hackers Content-Type: multipart/alternative; boundary="000000000000df72fe060f7b71c1" X-Rspamd-Queue-Id: 4TJ64p0RBQz46k5 X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000df72fe060f7b71c1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jan 21, 2024, 2:04=E2=80=AFPM Alan Somers wro= te: > On Sun, Jan 21, 2024 at 1:13=E2=80=AFPM Poul-Henning Kamp > wrote: > > > > -------- > > Warner Losh writes: > > > > > Even if all the cool kids are doing it, it doesn't mean the cool kids > are > > > wrong. We should not reject the hypothesis on that basis alone. > > > > I certainly didn't mean to imply that, my point about cvsup was precise= ly > > that the proof of the pudding is in the eating. > > > > The only comment I want to add, is that the test-cases should be > > expressed such that, if/when we find out Rust wasn't God's gift to > > programmers, we can reimplement the tool which interprets them in > > some hot-language-du-jour, without having to rewrite all the actual > > test-cases. > > I think imp and phk are after different things. phk wants a tool > written in Rust that be installed from ports and interpret test cases > defined in src. That's similar to the fsx tests, which I'm planning > to add to src once the package builder catches up. But imp wants test > cases that are actually written in Rust and which live in src, to test > his external toolchain proposal. That's very different. It's an > unusual requirement. Off hand I can't think of many subsystems that > are a good match for a test suite like that. ypclnt(3) might be one. > Hmmm, I'd kinda thought you wanted to rewrite fsx in rust and use it as part of the kyua tests, much like io.cc simulates some of the things fsx does. I didn't care about the details of whether it was a test case, used by test cases or interprets the results. It really doesn't matter to me beyond (a) it's used to test the system or some aspect of the system and (b) it's written in rust and compiled when we generally compile the other tests and test-like things. I thought this was exactly what you were proposing as one of the things that would show how writing it in rust would give us some benefit. But to be honest, I'm agnostic about how the 'build rust things in base via external toolchain' stuff is used for. The important thing is that something non-critical be selected as a pilot project to see whether the hassles of adding this, maintaining the port, and the resulting better outcomes because it's in rust. I proposed something related to testing (the (a) above) because that's well segregated from the rest of the system and it's something that could be redone, in all likelihood, in some other language should the need arise. I had thought fsx and fsx-rs would provide a nice compare and contrast study if they gave us approximately the same things. And besides, it's just my opinion of what project would be both useful and produce good data about using Rust in the base. I'm sure others could be proposed as well. Warner > --000000000000df72fe060f7b71c1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


=
On Sun, Jan 21, 2024, 2:04=E2=80=AFPM= Alan Somers <a= somers@freebsd.org> wrote:
O= n Sun, Jan 21, 2024 at 1:13=E2=80=AFPM Poul-Henning Kamp <phk@phk.freebs= d.dk> wrote:
>
> --------
> Warner Losh writes:
>
> > Even if all the cool kids are doing it, it doesn't mean the c= ool kids are
> > wrong. We should not reject the hypothesis on that basis alone. >
> I certainly didn't mean to imply that, my point about cvsup was pr= ecisely
> that the proof of the pudding is in the eating.
>
> The only comment I want to add, is that the test-cases should be
> expressed such that, if/when we find out Rust wasn't God's gif= t to
> programmers, we can reimplement the tool which interprets them in
> some hot-language-du-jour, without having to rewrite all the actual > test-cases.

I think imp and phk are after different things.=C2=A0 phk wants a tool
written in Rust that be installed from ports and interpret test cases
defined in src.=C2=A0 That's similar to the fsx tests, which I'm pl= anning
to add to src once the package builder catches up.=C2=A0 But imp wants test=
cases that are actually written in Rust and which live in src, to test
his external toolchain proposal.=C2=A0 That's very different.=C2=A0 It&= #39;s an
unusual requirement.=C2=A0 Off hand I can't think of many subsystems th= at
are a good match for a test suite like that.=C2=A0 ypclnt(3) might be one.<= br>

Hmmm, I'd = kinda thought you wanted to rewrite fsx in rust and use it
as par= t of the kyua tests, much like io.cc simulates some of the things
fsx does. I didn't care about the details of whether it was a test cas= e,
used by test cases or interprets the results. It really doesn&= #39;t matter to
me beyond (a) it's used to test the system or= some aspect of the system
and (b) it's written in rust and c= ompiled when we generally compile the
other tests and test-like t= hings. I thought this was exactly what you were
proposing as one = of the things that would show how writing it in rust
would give u= s some benefit.

But to be honest, I'm agnostic= about how the 'build rust things in base
via external toolch= ain' stuff is used for. The important thing is that something
non-critical be selected as a pilot project to see whether the hassles of<= /div>
adding this, maintaining the port, and the resulting better outco= mes
because it's in rust. I proposed something related to tes= ting (the (a) above)
because that's well segregated from the = rest of the system and it's
something that could be redone, i= n all likelihood, in some other language
should the need arise. I= had thought fsx and fsx-rs would provide a nice
compare and cont= rast study if they gave us approximately the same things.

And besides, it's just my opinion of what project would be both= useful and produce
good data about using Rust in the base. I'= ;m sure others could be proposed
as well.

Warner
--000000000000df72fe060f7b71c1-- From nobody Sun Jan 21 21:36:56 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ6BQ4JTlz57njn for ; Sun, 21 Jan 2024 21:37:02 +0000 (UTC) (envelope-from robert@rrbrussell.com) Received: from wout1-smtp.messagingengine.com (wout1-smtp.messagingengine.com [64.147.123.24]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ6BP6B7xz47wy for ; Sun, 21 Jan 2024 21:37:01 +0000 (UTC) (envelope-from robert@rrbrussell.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=rrbrussell.com header.s=fm2 header.b=WrnwQTs7; dkim=pass header.d=messagingengine.com header.s=fm3 header.b="Y /l+bTv"; dmarc=pass (policy=quarantine) header.from=rrbrussell.com; spf=pass (mx1.freebsd.org: domain of robert@rrbrussell.com designates 64.147.123.24 as permitted sender) smtp.mailfrom=robert@rrbrussell.com Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.west.internal (Postfix) with ESMTP id 4120D320030E for ; Sun, 21 Jan 2024 16:37:00 -0500 (EST) Received: from mailfrontend1 ([10.202.2.162]) by compute4.internal (MEProxy); Sun, 21 Jan 2024 16:37:00 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rrbrussell.com; h=cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1705873019; x=1705959419; bh=HsMldDoS7uHwTcyYPxbgQAJKxdCrOaGR4uPyXz/GEzE=; b= WrnwQTs7JnOO+Iakq9zBbLzMN5Xc3stX2sfPpYLoKTvx6E/AHopAN5loDIzrJb0/ WQjnHrO0KKipDtVrXRoNlr4ZTsIJpNwxtejtijTFhg8hb+t4BUSFVeftJyIgjmQ/ J5BFlipriVLZI3d3x0OW16OApCpMRLZ/00xLN/N3n8ypRF1jpRfAu5GlqONWn7nT e46RUICMonfaYa9cO9+GdEZMChBZoEzqk5KvmsFNUB1CJ24TTIdf9c3t3krF7d5/ BH/ivLZtjUDuGSIWVPxsawbxTu8HET2nOb4oz9HwtUuYueK62nHl/EOqq28VNKSy Sh240mzmWOhtZTqJgUN35g== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1705873019; x= 1705959419; bh=HsMldDoS7uHwTcyYPxbgQAJKxdCrOaGR4uPyXz/GEzE=; b=Y /l+bTvpBz5+ff8xt1ByImAoSoBmfUzOOYNFLmATSKTC/Qn0ISxajtULmszopkew1 bvV/P2j6JKc5HsAwWRx9bwuIhlH3bg1qxOAS+AUNjW0XCrPNDFb/0kG+pVC3S9pq HOEaVthgnVjzQUFC4DFoSeNhvjoJB7EBThXv8tRlJaPGSRlJEnOE+qkJ9bSKBNID h93NApfbwIZ/6xjzbl0F919Ro0xqXimFnqXXM9ZGvjBy6QcAIqCudQuJ6aD/uKLG hO1JU7qMZF7teMwpg22sHHZAPtb93xDpmxuO9w2skoTeMUaNlrMtDixa501T+quZ SJwE+bLSI48FaJp2UIGDg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdekgedgudehtdcutefuodetggdotefrod ftvfcurfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfgh necuuegrihhlohhuthemuceftddtnecunecujfgurhepfffhvffukfgjfhfogggtgfesth ejredtredtvdenucfhrhhomhepfdftohgsvghrthcutfdrucftuhhsshgvlhhlfdcuoehr ohgsvghrthesrhhrsghruhhsshgvlhhlrdgtohhmqeenucggtffrrghtthgvrhhnpeduhf ejieekkeekieehgfeghefhjeegledvledvtdetgeevfeefvdeiffekvddtgfenucevlhhu shhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehrohgsvghrthesrh hrsghruhhsshgvlhhlrdgtohhm X-ME-Proxy: Feedback-ID: ie421460a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Sun, 21 Jan 2024 16:36:59 -0500 (EST) Date: Sun, 21 Jan 2024 15:36:56 -0600 From: "Robert R. Russell" To: freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) Message-ID: <20240121153656.050752c4@venus.private.rrbrussell.com> In-Reply-To: <80529ee4-acc3-456c-8aa9-7fd7ebbf0803@m5p.com> References: <01519AEB-2725-492F-BC17-A7A40166D437@FreeBSD.org> <80529ee4-acc3-456c-8aa9-7fd7ebbf0803@m5p.com> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; amd64-portbld-freebsd14.0) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spamd-Bar: ----- X-Spamd-Result: default: False [-5.10 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; DWL_DNSWL_LOW(-1.00)[messagingengine.com:dkim]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[rrbrussell.com,quarantine]; R_DKIM_ALLOW(-0.20)[rrbrussell.com:s=fm2,messagingengine.com:s=fm3]; R_SPF_ALLOW(-0.20)[+ip4:64.147.123.24]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[64.147.123.24:from]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; FREEFALL_USER(0.00)[robert]; ASN(0.00)[asn:29838, ipnet:64.147.123.0/24, country:US]; MID_RHS_MATCH_FROMTLD(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_TLS_LAST(0.00)[]; DKIM_TRACE(0.00)[rrbrussell.com:+,messagingengine.com:+] X-Rspamd-Queue-Id: 4TJ6BP6B7xz47wy On Sat, 20 Jan 2024 12:58:25 -0500 George Mitchell wrote: > On 1/20/24 12:34, Dimitry Andric wrote: > > [...] > > However, I think this discussion is going in the wrong direction: > > why keep attempting to build all these huge toolchain components in > > our base system at all? [...] > > +1. > I speak from ignorance on the cost/benefit ratio of rust. So perhaps > someone can tell us: what is the size of the rust runtime > library(ies)? Do we continue to want FreeBSD to support small > systems? Should we ponder dividing the base system into the > lightweight part and the heavier weight part? Honestly, I am not > trying to sow dissension, but I do suggest a serious discussion. > -- George Rust defaults to static linking. However, it doesn't blindly link everything in either. Excluding systems with a non volatile storage capacity measured in megabytes Rust will fit in just fine. From nobody Sun Jan 21 22:20:45 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ7972qndz57s3P for ; Sun, 21 Jan 2024 22:20:59 +0000 (UTC) (envelope-from asomers@gmail.com) Received: from mail-vk1-f181.google.com (mail-vk1-f181.google.com [209.85.221.181]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ79719t9z4HkR; Sun, 21 Jan 2024 22:20:59 +0000 (UTC) (envelope-from asomers@gmail.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-vk1-f181.google.com with SMTP id 71dfb90a1353d-4b7480a80ceso2153459e0c.0; Sun, 21 Jan 2024 14:20:59 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705875658; x=1706480458; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hzACVPkSPoz9l23iNg54A3ale/JYapLybJLhDeVLrxI=; b=AlFfPmfhpWOS17qhQMhXKr94OdU54++ZzWqVxcW3IirHWv24L+XPifeziYX4J6Ju+G KDtWH5mFHKKAvU+ayD6VSOLgdYcWQEuZBfc7LvvWBygMotBZX1bXDeTFSl1KAmX7CNna y3Jz5QGxJPkohiCw3OYkzz3fankYJFEEKXqls8Xeo1LR1R8NE9q3uJWvCniZ0BlhVweM +JW6lFVvniNjKfguG63YmFTgS0eevKgpSyj3e3zVfW6J/rVxU/Y4behOmjoPVhzE7fep Oywvo6EopO+BPY00MFlFjv+lXvqNGnsuIaAQ+YCmPWXefsfE913cZw1P+lTR1GC+KY+t Bvrw== X-Gm-Message-State: AOJu0YztiPJ2+TyqGIMPg3+SNkBNg8DhyClhhhRVwSsYfYCqLS+ZM4Pw 3qj4HZe5z2D1kTgjnA+DzkWs6HsMFROVwIah+9iTjVHOzeFrlu9L41ko5Io8jkfwb+B1rdFEbS2 AiARYREnGip5yKQ90g7LQRkx25xM= X-Google-Smtp-Source: AGHT+IG9yUEB+lmpAVjLyWtFfvfw4Jz3l1jwoePvvCs7ZQ0YNJf1gdBcI5k/+4fExVDzS3iyuSZZvkt47pD4CI/pMzU= X-Received: by 2002:ac5:cdeb:0:b0:4b7:3b27:7c78 with SMTP id v11-20020ac5cdeb000000b004b73b277c78mr2248862vkn.15.1705875658299; Sun, 21 Jan 2024 14:20:58 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> <202401212013.40LKD1a7095506@critter.freebsd.dk> In-Reply-To: From: Alan Somers Date: Sun, 21 Jan 2024 15:20:45 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Warner Losh Cc: Poul-Henning Kamp , Kristof Provost , George Mitchell , FreeBSD Hackers Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Queue-Id: 4TJ79719t9z4HkR X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:15169, ipnet:209.85.128.0/17, country:US] On Sun, Jan 21, 2024 at 2:32=E2=80=AFPM Warner Losh wrote: > > > > On Sun, Jan 21, 2024, 2:04=E2=80=AFPM Alan Somers w= rote: >> >> On Sun, Jan 21, 2024 at 1:13=E2=80=AFPM Poul-Henning Kamp wrote: >> > >> > -------- >> > Warner Losh writes: >> > >> > > Even if all the cool kids are doing it, it doesn't mean the cool kid= s are >> > > wrong. We should not reject the hypothesis on that basis alone. >> > >> > I certainly didn't mean to imply that, my point about cvsup was precis= ely >> > that the proof of the pudding is in the eating. >> > >> > The only comment I want to add, is that the test-cases should be >> > expressed such that, if/when we find out Rust wasn't God's gift to >> > programmers, we can reimplement the tool which interprets them in >> > some hot-language-du-jour, without having to rewrite all the actual >> > test-cases. >> >> I think imp and phk are after different things. phk wants a tool >> written in Rust that be installed from ports and interpret test cases >> defined in src. That's similar to the fsx tests, which I'm planning >> to add to src once the package builder catches up. But imp wants test >> cases that are actually written in Rust and which live in src, to test >> his external toolchain proposal. That's very different. It's an >> unusual requirement. Off hand I can't think of many subsystems that >> are a good match for a test suite like that. ypclnt(3) might be one. > > > Hmmm, I'd kinda thought you wanted to rewrite fsx in rust and use it > as part of the kyua tests, much like io.cc simulates some of the things > fsx does. I didn't care about the details of whether it was a test case, > used by test cases or interprets the results. It really doesn't matter to > me beyond (a) it's used to test the system or some aspect of the system > and (b) it's written in rust and compiled when we generally compile the > other tests and test-like things. I thought this was exactly what you wer= e > proposing as one of the things that would show how writing it in rust > would give us some benefit. > > But to be honest, I'm agnostic about how the 'build rust things in base > via external toolchain' stuff is used for. The important thing is that so= mething > non-critical be selected as a pilot project to see whether the hassles of > adding this, maintaining the port, and the resulting better outcomes > because it's in rust. I proposed something related to testing (the (a) ab= ove) > because that's well segregated from the rest of the system and it's > something that could be redone, in all likelihood, in some other language > should the need arise. I had thought fsx and fsx-rs would provide a nice > compare and contrast study if they gave us approximately the same things. > > And besides, it's just my opinion of what project would be both useful an= d produce > good data about using Rust in the base. I'm sure others could be proposed > as well. > > Warner The fsx rewrite is already complete and it's in ports. I don't see any benefit to bringing it back to src other than to test your external toolchain proposal. Do you still want to do it? From nobody Sun Jan 21 22:50:13 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ7q85Jrvz57vdg for ; Sun, 21 Jan 2024 22:50:28 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [IPv6:2a00:1450:4864:20::32d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "GTS CA 1D4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ7q82DRWz4NZV for ; Sun, 21 Jan 2024 22:50:28 +0000 (UTC) (envelope-from wlosh@bsdimp.com) Authentication-Results: mx1.freebsd.org; none Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-40e7065b7bdso31775115e9.3 for ; Sun, 21 Jan 2024 14:50:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bsdimp-com.20230601.gappssmtp.com; s=20230601; t=1705877426; x=1706482226; darn=freebsd.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=8sPis3FwR+1FMb9tHVDRf+/LhyJ/42BCpnft4jFoElo=; b=XBcVvnchFV9C9SyHR5YdXKLoY02frKIhuNj4eyPZUHNF6gt+jZj1WVyB0mXLF/CquW ODJQDXfEGwEUDpEqFGRxqskLhOCWw8gXU97V2GQWJ6OghsL2XVSLhnVbgWc8lpI9QalE yO4S87rPmHyOLOzIw5im8HCTuIY+P47Eq8R5GzUmCVSXBfClDPuUEkp7aP4JEza8cb/O ijUmhyRWPlOwThcohaSLH6MGsDkimld6M7tS7o4cD/1Tpp2wc3iIjwYO3V2TEQUwfVsK /Mqlx7vobIjtY7iC3zp6VK8lfeRwMUPaXx214lyKZ6UumTVSVe/T4LNu/LERiukHN6Ju VtWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705877426; x=1706482226; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=8sPis3FwR+1FMb9tHVDRf+/LhyJ/42BCpnft4jFoElo=; b=wYXD/yvt3ELZthhdGXI+44bYcQykiEY1BA/DK/t/TGRC3RwRnaSmBw1oJhDSS/UhK7 w4fx0gUDS0mljwHWH9RWN6sdP874RlE28+nr2o0h7J6pKNbH44tqisO637EEVqYnnWj/ PrsiG1Mn2+dzkaFypnF0yuytFhVhlWDQlCg1z/KfZVFjtOVR9f+ByYrsYNMERCehs62I 4dn+9vMWvHQGEiknZukAAg5M/4uAm1KX0Uyrvaad7sAKVU2AsdFArhFQuTSgonhFU3eR Vf0yXnchh+boQBdZzFD4JERDZYnZcp+2PGhETVDHlSekgBC+fSa/F8qbkpuPwsA1Z0ji pcEQ== X-Gm-Message-State: AOJu0YwqsuwlS2OPfrVCGD6SqO8k7X7Bz0aynbOCjqTd+SsA9cNaVNFi qckPJt90JChteNSo1JaN6xRmbnBmrVJWIp0I7sCDVuj/wyPmCzel1rwAMrkwd7lCDPK4pvSIBZ2 OWNpfaI4wnfigoR6dLmYtmr4MqbVy40NRStnFpA== X-Google-Smtp-Source: AGHT+IGDrS0n8KxjMd21Xke6MOWnTO9j4OdccpKaP//PjbOZs4wA6daSy938+pkSDvelfJVB5QW2IOwzhCNNJAoVGr0= X-Received: by 2002:a05:600c:1911:b0:40e:8e2b:3ce8 with SMTP id j17-20020a05600c191100b0040e8e2b3ce8mr1151749wmq.51.1705877425366; Sun, 21 Jan 2024 14:50:25 -0800 (PST) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> <40bc1694-ee00-431b-866e-396e9d5c07a2@m5p.com> <202401211626.40LGQDim013134@critter.freebsd.dk> <4EF67303-A995-457A-990F-A4972C23EA80@FreeBSD.org> <202401212013.40LKD1a7095506@critter.freebsd.dk> In-Reply-To: From: Warner Losh Date: Sun, 21 Jan 2024 15:50:13 -0700 Message-ID: Subject: Re: The Case for Rust (in the base system) To: Alan Somers Cc: Poul-Henning Kamp , Kristof Provost , George Mitchell , FreeBSD Hackers Content-Type: multipart/alternative; boundary="000000000000f83ac7060f7c8994" X-Rspamd-Queue-Id: 4TJ7q82DRWz4NZV X-Spamd-Bar: ---- X-Rspamd-Pre-Result: action=no action; module=replies; Message is reply to one we originated X-Spamd-Result: default: False [-4.00 / 15.00]; REPLY(-4.00)[]; TAGGED_RCPT(0.00)[freebsd]; ASN(0.00)[asn:15169, ipnet:2a00:1450::/32, country:US] --000000000000f83ac7060f7c8994 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Jan 21, 2024, 3:20=E2=80=AFPM Alan Somers wro= te: > On Sun, Jan 21, 2024 at 2:32=E2=80=AFPM Warner Losh wrot= e: > > > > > > > > On Sun, Jan 21, 2024, 2:04=E2=80=AFPM Alan Somers = wrote: > >> > >> On Sun, Jan 21, 2024 at 1:13=E2=80=AFPM Poul-Henning Kamp > wrote: > >> > > >> > -------- > >> > Warner Losh writes: > >> > > >> > > Even if all the cool kids are doing it, it doesn't mean the cool > kids are > >> > > wrong. We should not reject the hypothesis on that basis alone. > >> > > >> > I certainly didn't mean to imply that, my point about cvsup was > precisely > >> > that the proof of the pudding is in the eating. > >> > > >> > The only comment I want to add, is that the test-cases should be > >> > expressed such that, if/when we find out Rust wasn't God's gift to > >> > programmers, we can reimplement the tool which interprets them in > >> > some hot-language-du-jour, without having to rewrite all the actual > >> > test-cases. > >> > >> I think imp and phk are after different things. phk wants a tool > >> written in Rust that be installed from ports and interpret test cases > >> defined in src. That's similar to the fsx tests, which I'm planning > >> to add to src once the package builder catches up. But imp wants test > >> cases that are actually written in Rust and which live in src, to test > >> his external toolchain proposal. That's very different. It's an > >> unusual requirement. Off hand I can't think of many subsystems that > >> are a good match for a test suite like that. ypclnt(3) might be one. > > > > > > Hmmm, I'd kinda thought you wanted to rewrite fsx in rust and use it > > as part of the kyua tests, much like io.cc simulates some of the things > > fsx does. I didn't care about the details of whether it was a test case= , > > used by test cases or interprets the results. It really doesn't matter = to > > me beyond (a) it's used to test the system or some aspect of the system > > and (b) it's written in rust and compiled when we generally compile the > > other tests and test-like things. I thought this was exactly what you > were > > proposing as one of the things that would show how writing it in rust > > would give us some benefit. > > > > But to be honest, I'm agnostic about how the 'build rust things in base > > via external toolchain' stuff is used for. The important thing is that > something > > non-critical be selected as a pilot project to see whether the hassles = of > > adding this, maintaining the port, and the resulting better outcomes > > because it's in rust. I proposed something related to testing (the (a) > above) > > because that's well segregated from the rest of the system and it's > > something that could be redone, in all likelihood, in some other langua= ge > > should the need arise. I had thought fsx and fsx-rs would provide a nic= e > > compare and contrast study if they gave us approximately the same thing= s. > > > > And besides, it's just my opinion of what project would be both useful > and produce > > good data about using Rust in the base. I'm sure others could be propos= ed > > as well. > > > > Warner > > The fsx rewrite is already complete and it's in ports. I don't see > any benefit to bringing it back to src other than to test your > external toolchain proposal. Do you still want to do it? > I'm happy to assist anybody that wants to run the experiment. But I'd never planned on driving it. That's for people advocating for the change. If someone wants to build rust things as a demonstration project I'll help with the build system aspects. Warner > --000000000000f83ac7060f7c8994 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable


On Sun, Jan 21, 2024, 3:20=E2=80=AFPM Alan Somers <= asomers@freebsd.org> wrote:
On Sun, Jan 21, 2024 at 2:32=E2=80= =AFPM Warner Losh <imp@bsdimp.com> wrote:
>
>
>
> On Sun, Jan 21, 2024, 2:04=E2=80=AFPM Alan Somers <asomers@freebsd= .org> wrote:
>>
>> On Sun, Jan 21, 2024 at 1:13=E2=80=AFPM Poul-Henning Kamp <phk@= phk.freebsd.dk> wrote:
>> >
>> > --------
>> > Warner Losh writes:
>> >
>> > > Even if all the cool kids are doing it, it doesn't m= ean the cool kids are
>> > > wrong. We should not reject the hypothesis on that basis= alone.
>> >
>> > I certainly didn't mean to imply that, my point about cvs= up was precisely
>> > that the proof of the pudding is in the eating.
>> >
>> > The only comment I want to add, is that the test-cases should= be
>> > expressed such that, if/when we find out Rust wasn't God&= #39;s gift to
>> > programmers, we can reimplement the tool which interprets the= m in
>> > some hot-language-du-jour, without having to rewrite all the = actual
>> > test-cases.
>>
>> I think imp and phk are after different things.=C2=A0 phk wants a = tool
>> written in Rust that be installed from ports and interpret test ca= ses
>> defined in src.=C2=A0 That's similar to the fsx tests, which I= 'm planning
>> to add to src once the package builder catches up.=C2=A0 But imp w= ants test
>> cases that are actually written in Rust and which live in src, to = test
>> his external toolchain proposal.=C2=A0 That's very different.= =C2=A0 It's an
>> unusual requirement.=C2=A0 Off hand I can't think of many subs= ystems that
>> are a good match for a test suite like that.=C2=A0 ypclnt(3) might= be one.
>
>
> Hmmm, I'd kinda thought you wanted to rewrite fsx in rust and use = it
> as part of the kyua tests, much like io.cc simulates some of the thing= s
> fsx does. I didn't care about the details of whether it was a test= case,
> used by test cases or interprets the results. It really doesn't ma= tter to
> me beyond (a) it's used to test the system or some aspect of the s= ystem
> and (b) it's written in rust and compiled when we generally compil= e the
> other tests and test-like things. I thought this was exactly what you = were
> proposing as one of the things that would show how writing it in rust<= br> > would give us some benefit.
>
> But to be honest, I'm agnostic about how the 'build rust thing= s in base
> via external toolchain' stuff is used for. The important thing is = that something
> non-critical be selected as a pilot project to see whether the hassles= of
> adding this, maintaining the port, and the resulting better outcomes > because it's in rust. I proposed something related to testing (the= (a) above)
> because that's well segregated from the rest of the system and it&= #39;s
> something that could be redone, in all likelihood, in some other langu= age
> should the need arise. I had thought fsx and fsx-rs would provide a ni= ce
> compare and contrast study if they gave us approximately the same thin= gs.
>
> And besides, it's just my opinion of what project would be both us= eful and produce
> good data about using Rust in the base. I'm sure others could be p= roposed
> as well.
>
> Warner

The fsx rewrite is already complete and it's in ports.=C2=A0 I don'= t see
any benefit to bringing it back to src other than to test your
external toolchain proposal.=C2=A0 Do you still want to do it?

I'm happy= to assist anybody that wants to run the experiment. But I'd never plan= ned on driving it. That's for people advocating for the change. If some= one wants to build rust things as a demonstration project I'll help wit= h the build system aspects.

Warner
--000000000000f83ac7060f7c8994-- From nobody Sun Jan 21 23:14:03 2024 X-Original-To: freebsd-hackers@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4TJ8LV069pz57xXn for ; Sun, 21 Jan 2024 23:14:10 +0000 (UTC) (envelope-from robert@rrbrussell.com) Received: from wout5-smtp.messagingengine.com (wout5-smtp.messagingengine.com [64.147.123.21]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 4TJ8LS6zl0z4Sfy for ; Sun, 21 Jan 2024 23:14:08 +0000 (UTC) (envelope-from robert@rrbrussell.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=rrbrussell.com header.s=fm2 header.b=rMQsN2iT; dkim=pass header.d=messagingengine.com header.s=fm3 header.b="N a17RoH"; dmarc=pass (policy=quarantine) header.from=rrbrussell.com; spf=pass (mx1.freebsd.org: domain of robert@rrbrussell.com designates 64.147.123.21 as permitted sender) smtp.mailfrom=robert@rrbrussell.com Received: from compute7.internal (compute7.nyi.internal [10.202.2.48]) by mailout.west.internal (Postfix) with ESMTP id 8FB503200A95 for ; Sun, 21 Jan 2024 18:14:07 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute7.internal (MEProxy); Sun, 21 Jan 2024 18:14:07 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rrbrussell.com; h=cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm2; t=1705878847; x=1705965247; bh=jDP9UC+PvsY3Ng0iPQiUwurkFmFt96/SOx8M1LXFuTw=; b= rMQsN2iT+DFpjFHPvKsTZ5oWTPMW9YLrpKdZGDtKk9G3DcfnRX9X5KufLPXgvAFe 0NK8D5Zv0CSSxY6ZntCNc9dKYoh9qxavkf/eKs1VtDNZN3OFpB/Nc5PCcRkGnqc6 nOaWNzNrHVlToAx0H/9n88vhPq2fABAUjGgeK1YKS91Z+ICv/3ccCvN7ICNxKKFa Vfa6oH0Xb2hiscmopCZEQ5NhBfmexbeYARQGOY1mP+4eeZoIGgBuekLriVZEdUrn S10fLi1fWzQy82IhdZNTjsEHc7TOCKYrJN2saMSjYf7iPb7UFn+3t9YMYTdoGXUT uhKb9KWQJSzT3aNOb/jFFg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm3; t=1705878847; x= 1705965247; bh=jDP9UC+PvsY3Ng0iPQiUwurkFmFt96/SOx8M1LXFuTw=; b=N a17RoHoGy8/P9AA4cGRGYUD8UFH9pFX5DpjZDR46P/uybYerI2OgBloHyXSNvtD/ SbKczEgafE6cHeowHZEDPQg7xL27IsPDxwL5+QKkK1PFSfce5P8Nc9skZg/pbMws pwYZiFFr7whurFB5bIpHJA0W+uzm9uCM+noG9eyqPFUBaIXVDTnHvqovXVfK5Er1 /TgTZ05OL7yZv/23z/+9/E61pqO01la4oXHXDr2qBu54ai3vD0UAT0qmC/wEQK/t Eei6NWEKwyon8ZAaUDk956mksATEknZsY772Hl/woB7uv74W3K3nqmPzXLSSFK+p zzCfAZVDytF71lOqnV6Nw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvkedrvdekhedgtdejucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpeffhffvuffkjghfofggtgfgsehtje ertdertddvnecuhfhrohhmpedftfhosggvrhhtucftrdcutfhushhsvghllhdfuceorhho sggvrhhtsehrrhgsrhhushhsvghllhdrtghomheqnecuggftrfgrthhtvghrnhepudfhje eikeekkeeihefggeehhfejgeelvdelvddtteegveeffedvieffkedvtdfgnecuvehluhhs thgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomheprhhosggvrhhtsehrrh gsrhhushhsvghllhdrtghomh X-ME-Proxy: Feedback-ID: ie421460a:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Sun, 21 Jan 2024 18:14:06 -0500 (EST) Date: Sun, 21 Jan 2024 17:14:03 -0600 From: "Robert R. Russell" To: freebsd-hackers@freebsd.org Subject: Re: The Case for Rust (in the base system) Message-ID: <20240121171403.6f167408@venus.private.rrbrussell.com> In-Reply-To: <202401210751.40L7pWEF011188@critter.freebsd.dk> References: <1673801705774097@mail.yandex.ru> <202401210751.40L7pWEF011188@critter.freebsd.dk> X-Mailer: Claws Mail 3.19.1 (GTK+ 2.24.33; amd64-portbld-freebsd14.0) List-Id: Technical discussions relating to FreeBSD List-Archive: https://lists.freebsd.org/archives/freebsd-hackers List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-freebsd-hackers@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Spamd-Bar: ---- X-Spamd-Result: default: False [-4.10 / 15.00]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[rrbrussell.com,quarantine]; R_DKIM_ALLOW(-0.20)[rrbrussell.com:s=fm2,messagingengine.com:s=fm3]; R_SPF_ALLOW(-0.20)[+ip4:64.147.123.21]; MIME_GOOD(-0.10)[text/plain]; RCVD_IN_DNSWL_LOW(-0.10)[64.147.123.21:from]; FREEFALL_USER(0.00)[robert]; DWL_DNSWL_NONE(0.00)[messagingengine.com:dkim]; RCVD_VIA_SMTP_AUTH(0.00)[]; RCPT_COUNT_ONE(0.00)[1]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; ASN(0.00)[asn:29838, ipnet:64.147.123.0/24, country:US]; MID_RHS_MATCH_FROMTLD(0.00)[]; RCVD_COUNT_THREE(0.00)[3]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MLMMJ_DEST(0.00)[freebsd-hackers@freebsd.org]; TO_DN_NONE(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[freebsd-hackers@freebsd.org]; TO_MATCH_ENVRCPT_ALL(0.00)[]; RCVD_TLS_LAST(0.00)[]; DKIM_TRACE(0.00)[rrbrussell.com:+,messagingengine.com:+] X-Rspamd-Queue-Id: 4TJ8LS6zl0z4Sfy On Sun, 21 Jan 2024 07:51:32 +0000 "Poul-Henning Kamp" wrote: > -------- > Ihor Antonov writes: > > > As much as I love the idea of Rust, I don't think it is going to > > solve our problems. > > The tools are /never/ the real problem. > > I will readily agree that the ISO-C people have done more to hurt > the C language, and less to improve it, than anybody else, and that > we need to deal with their continued refusal to come into the > 1990'ies. I would love for you to expound on this point further. > But after I read this entire thread, the "pro" argument for Rust > seems boil down to just "all the cool kids do it". > > That exact same argument was used for "Perl in base" and "Java in > base" previously, and if we hadn't dodged those bullets, we wouldn't > be here today. > > The sprawling and loosely connected ports collection has several > strata of "all the cool kids do it" languages, and it seems to be > a much better "organism" for dealing with their eventual obsolescence, > than our tightly integrated src collection. > > I will also "second" the comment about C++ getting to be a really > good language, in particular if you play it like a violin: > > Just because you /paid/ for the entire bow, doesn't mean you > have to /play/ the entire bow. Unfortunately, most Rust programmers treat cargo and crates.io the same way most C++ programmers treat the Standard Template Library and Object Oriented Programming. As much, as many, and as often as possible. > So rather than jump onto this or some other hypewagon-of-the-year, > only to regret it some years later and having to repay the technical > debt with interest to get it out of the tree again, I propose that > we quietly and gradually look more and more to C++ for our "advanced > needs". I don't have your programming experience in and familiarity with C++ so I am looking at this from a different angle. I am worried we might end up with more technical debt faster if we use C++ than if we try something else. In my experience with Linux, now FreeBSD, and college I have seen more C++ and Java projects eat their original programmers out of the project and die than any other two languages singularly or combined. Even the "unmaintainable" C projects I have tried to resurrect got further than any attempt at resurrecting less decayed Java or C++ projects. I don't know exactly why but I have my suspicions. Based on those suspicions I am very leery of migrating code to C++. Rustc and/or Cargo will not be fun to integrate into the build system for base. I think that integration and the Rust code it supports will be easier to maintain or replace than any C++ code. I can mechanically substitute another repo for crates.io which will block Cargo from pulling in anything we don't curate. I don't know of a way to enforce a subset of C++. > I also propose, that next time somebody advocates for importing > some "all the cool kids are doing it language" or other, we refuse > to even look at their proposal, until they have proven their skill > in, and dedication to, the language, by faithfully reimplementing > cvsup in it, and documented how and why it is a better language for > that, than Modula-3 was. > > Poul-Henning > How do you define all the cool kids are doing it language versus I am assuming a serious language? I am not being sarcastic. For example I would personally call JavaScript unsuitable for operating system components but there is a huge amount of it out there. Darcs is written in Haskell but I don't think Haskell is good for operating system components.