git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "brian m. carlson" <sandals@crustytoothpaste.net>
To: Patrick Steinhardt <ps@pks.im>
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Taylor Blau" <me@ttaylorr.com>,
	rsbecker@nexbridge.com, "'Elijah Newren'" <newren@gmail.com>,
	"'Kristoffer Haugsbakk'" <kristofferhaugsbakk@fastmail.com>,
	"'Josh Soref'" <gitgitgadget@gmail.com>,
	git@vger.kernel.org, "'Christian Brabandt'" <cb@256bit.org>,
	"'Phillip Wood'" <phillip.wood123@gmail.com>,
	"'Eli Schwartz'" <eschwartz@gentoo.org>,
	"'Haelwenn (lanodan) Monnier'" <contact@hacktivis.me>,
	"'Johannes Schindelin'" <Johannes.Schindelin@gmx.de>,
	"'Matthias Aßhauer'" <mha1993@live.de>,
	"'Sam James'" <sam@gentoo.org>,
	"'Collin Funk'" <collin.funk1@gmail.com>,
	"'Mike Hommey'" <mh@glandium.org>,
	"'Pierre-Emmanuel Patry'" <pierre-emmanuel.patry@embecosm.com>,
	"'D. Ben Knoble'" <ben.knoble@gmail.com>,
	"'Ramsay Jones'" <ramsay@ramsayjones.plus.com>,
	"'Ezekiel Newren'" <ezekielnewren@gmail.com>,
	"'Josh Steadmon'" <steadmon@google.com>,
	"'Calvin Wan'" <calvinwan@google.com>
Subject: Re: [PATCH v3 02/15] xdiff: introduce rust
Date: Thu, 4 Sep 2025 00:57:25 +0000	[thread overview]
Message-ID: <aLjj9cG9_K6YLfeA@fruit.crustytoothpaste.net> (raw)
In-Reply-To: <aLfU5sEa-RE3X4G2@pks.im>

[-- Attachment #1: Type: text/plain, Size: 8481 bytes --]

On 2025-09-03 at 05:40:54, Patrick Steinhardt wrote:
> If I had the choice, I'd much rather adopt an ancient version of Rust if
> it means that more platforms can support it.

I think you may be assuming that gccrs targeting Rust 1.49 will
magically make it work on more platforms than upstream Rust will.
That's not the case.

gccrs targeting Rust 1.49 will use libstd (the standard library) and
libcore (the library for freestanding implementations) from Rust 1.49
and that means it will only support those platforms that Rust 1.49 did.
For instance, Rust added support for Apache NuttX relatively recently.
Even if it has stellar support in GCC, it won't work with that version
of gccrs because the underlying libraries don't support any of those
platforms.  The only thing you can target that you couldn't before are
systems that use neither libstd nor libcore—which essentially means the
Linux kernel.  It's like using a glibc from 2009 and expecting to work
on RISC-V—it simply won't[0].

If you need support for new platforms, that requires a much _newer_
version of Rust.  Thus, to be able to use gccrs, porters need to use the
existing gcc codegen backend and get that code in immediately so that
when gccrs is out and supports Rust 1.91, the standard library will work
with those platforms.  The fastest way to getting platforms supported is
to port LLVM and then add them to upstream Rust that way.

I know there has been much complaint about the six-week lifespan of Rust
releases.  I myself dislike that.  But the situation is that LTS
releases require extensive amounts of work and nobody has stepped up to
do that or pay for it to be done.  Without dedicated staffing, it's not
going to happen.  That also means that individual projects decide what
versions of Rust they do and don't want to support.

We're already supporting the version in Debian stable for a year after
the new release comes out, so we're already far behind what everyone
else is doing.  For comparison, Rust 1.48 is in Debian 11, so we'd be
supporting an effectively five-year-old compiler instead of a
three-year-old compiler.

Requiring Rust 1.49 instead of Rust 1.63 makes it harder to use tools
like bindgen and cbindgen, which exist to automatically create types and
functions in one language in the other.  That, in turn, will hinder our
ability to effectively write code that crosses the boundary and
introduce hard-to-find bugs, since we'll have to do that work manually.
My experience is that these kinds of bugs tend to actually show up more
frequently on less common platforms, like big-endian systems, so we'll
be worsening the platform experience for those systems.

For context, when we ported a core service from C to Rust at work, we
used bindgen to generate C struct definitions, which made the process
much easier and avoided random crashes.  As a result, nobody noticed the
fact that we ported it incrementally over a couple of years.  If we
hadn't used bindgen, we probably would have had lots of random segfaults
due to failing to maintain compatibility between Rust and C definitions
of the same structures, which users would not have appreciated and would
not have helped our goal of making our software more reliable and easier
to maintain.

> The gccrs maintainers are actively working on that backend, and as far
> as I understand the main difference between LLVM and gccrs is that the
> latter doesn't have to be ported over to every single platform
> individually.

I don't think that's the case.  gccrs has to be compiled for every
platform just like LLVM does.  LLVM is actually easier to support
because it can cross-compile from any platform to any platform without
recompilation.  For instance, I can target riscv64gc-unknown-openbsd on
my Debian amd64 laptop assuming I can provide the necessary libraries
for OpenBSD when compiling, but GCC requires me to specifically compile
a compiler for that platform.

In any event, any portability changes will also likely need to go into
libstd and libcore, which is used identically with both compilers.

It is, however, the case that GCC supports more architectures (and
possibly more architecture/OS combinations) than LLVM.  For instance,
DEC Alpha and IA64 are only supported by GCC at the moment.

> I think adopting Rust as a mandatory dependency out of nowhere would not
> be playing nice. It may require significant effort from distros to adapt
> to the new reality, so we should give them time to do so.

We've actually had this discussion on the list several times where we've
proposed the inclusion of Rust.  This is not the first time it's come
up, or the second.  It was explicitly mentioned a year ago on the list
that we wanted to adopt Rust in the notes from the Contributor Summit.

There has been plenty of notice that this is coming down the line.  It's
not accurate to claim it's "out of nowhere" nor to claim that people
have not had plenty of time to port their systems.

Distros and porters should not be insensible to the increasing use of
Rust or the need for them to get their systems working.  For instance,
you cannot run a GNOME or MATE desktop environment without librsvg2,
which is written in Rust.  Python's cryptography package adopted Rust
over four years ago and there was the same gnashing of teeth[1], yet
little progress has been made by porters on the same affected
architectures since that time.  In that time, Debian has bootstrapped
and released an entire RISC-V port, complete with Rust.

I want to be clear I'm not opposed to supporting less common operating
systems or architectures.  For many years, my laptop was a PowerPC Mac,
and I've owned UltraSPARC, MIPS, and ARM hardware.  For personal code, I
try to test it in CI on at least Linux, macOS, FreeBSD, and NetBSD.  But
also, when a Debian package has not worked properly on PowerPC or
UltraSPARC, I've stepped up and fixed it.  My requests to other projects
when porting have been things like asking to write valid C or C++ (by
not making unaligned accesses or avoiding endianness assumptions, for
instance) and not to refrain from adding new languages or features.

It should be stated that there is a very easy way to get Rust working,
and that's to port LLVM to the platform in question.  IA-64 was removed
in 2009, but it might be possible to resurrect that out of tree if
there's interest and maybe even get it re-accepted upstream.  I'll point
out that AIX, Solaris, and QNX have done the necessary porting work to
get LLVM and Rust working over the past couple years, so it's not out of
the question for other platforms to do so as well.  And, for the
avoidance of doubt, I would be absolutely delighted if we were able to
support additional platforms with Rust as well.

Also, the approach of making it an optional component directly
contradicts the proposed policy I wrote up.  That's a recipe for
additional burdensome work maintaining two implementations, when we
actually want to make it easier for people to contribute functionality.
It also doesn't provide any of the memory safety benefits or address any
of the concerns from governments, security professionals, and other
parties about the real and substantial risks of continuing to develop in
C.

For example, there is zero chance I will implement any of the
SHA-1/SHA-256 compatibility code twice.  I'm already doing that in my
free time without any compensation at all and it's unreasonable to
expect me to do it twice or even to #ifdef out all the places it would
need to go.  I am happy to let someone else take responsibility for the
project instead, however, if they would like to do those things.

> It would be a shame, but right now it's a risky bet to build anything on
> top of Rust given that we don't officially accept it in Git yet. We need
> to first make the decision whether or not we want to have it right now,
> and if so how that's supposed to look like.

I think we had made the decision at the 2024 Contributor's Summit that
we wanted to adopt Rust in Git, so it was more of a matter of sending
the patches than actually making that decision.  As I recall, the
decision was unanimous.

[0] RISC-V was developed in 2010.
[1] https://www.reddit.com/r/rust/comments/lfysy9/pythons_cryptography_package_introduced_build/
-- 
brian m. carlson (they/them)
Toronto, Ontario, CA

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 262 bytes --]

  parent reply	other threads:[~2025-09-04  0:57 UTC|newest]

Thread overview: 204+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-17 20:32 [PATCH 0/7] RFC: Accelerate xdiff and begin its rustification Ezekiel Newren via GitGitGadget
2025-07-17 20:32 ` [PATCH 1/7] xdiff: introduce rust Ezekiel Newren via GitGitGadget
2025-07-17 21:30   ` brian m. carlson
2025-07-17 21:54     ` Junio C Hamano
2025-07-17 22:39     ` Taylor Blau
2025-07-18 23:15     ` Ezekiel Newren
2025-07-23 21:57       ` brian m. carlson
2025-07-23 22:26         ` Junio C Hamano
2025-07-28 19:11         ` Ezekiel Newren
2025-07-31 22:37           ` brian m. carlson
2025-07-22 22:02     ` Mike Hommey
2025-07-22 23:52       ` brian m. carlson
2025-07-17 22:38   ` Taylor Blau
2025-07-17 20:32 ` [PATCH 2/7] xdiff/xprepare: remove superfluous forward declarations Ezekiel Newren via GitGitGadget
2025-07-17 22:41   ` Taylor Blau
2025-07-17 20:32 ` [PATCH 3/7] xdiff: delete unnecessary fields from xrecord_t and xdfile_t Ezekiel Newren via GitGitGadget
2025-07-17 20:32 ` [PATCH 4/7] xdiff: make fields of xrecord_t Rust friendly Ezekiel Newren via GitGitGadget
2025-07-17 22:46   ` Taylor Blau
2025-07-17 23:13     ` brian m. carlson
2025-07-17 23:37       ` Elijah Newren
2025-07-18  0:23         ` Taylor Blau
2025-07-18  0:21       ` Taylor Blau
2025-07-18 13:35   ` Phillip Wood
2025-07-28 19:34     ` Ezekiel Newren
2025-07-28 19:52       ` Phillip Wood
2025-07-28 20:14         ` Ezekiel Newren
2025-07-31 14:20           ` Phillip Wood
2025-07-31 20:58             ` Ezekiel Newren
2025-08-01  9:14               ` Phillip Wood
2025-07-28 20:53         ` Junio C Hamano
2025-07-28 20:00       ` Collin Funk
2025-07-20  1:39   ` Johannes Schindelin
2025-07-17 20:32 ` [PATCH 5/7] xdiff: separate parsing lines from hashing them Ezekiel Newren via GitGitGadget
2025-07-17 22:59   ` Taylor Blau
2025-07-18 13:34   ` Phillip Wood
2025-07-17 20:32 ` [PATCH 6/7] xdiff: conditionally use Rust's implementation of xxhash Ezekiel Newren via GitGitGadget
2025-07-17 23:29   ` Taylor Blau
2025-07-18 19:00   ` Junio C Hamano
2025-07-31 21:13     ` Ezekiel Newren
2025-08-02  7:53       ` Matthias Aßhauer
2025-07-19 21:53   ` Johannes Schindelin
2025-07-20 10:14     ` Phillip Wood
2025-09-23  9:57       ` gitoxide-compatible licensing of Git's Rust code, was " Johannes Schindelin
2025-09-23 17:48         ` Jeff King
2025-09-24 13:48           ` Phillip Wood
2025-09-25  2:25             ` Jeff King
2025-09-25  5:42               ` Patrick Steinhardt
2025-09-26 10:06               ` Phillip Wood
2025-10-03  3:18                 ` Jeff King
2025-10-03  9:51                   ` Phillip Wood
2025-10-07  9:11                     ` Patrick Steinhardt
2025-11-17 13:37                     ` Johannes Schindelin
2025-10-05  5:32       ` Yee Cheng Chin
2025-07-17 20:32 ` [PATCH 7/7] github_workflows: install rust Ezekiel Newren via GitGitGadget
2025-07-17 21:23   ` brian m. carlson
2025-07-18 23:01     ` Ezekiel Newren
2025-07-25 23:56       ` Ben Knoble
2025-07-19 21:54   ` Johannes Schindelin
2025-07-17 21:51 ` [PATCH 0/7] RFC: Accelerate xdiff and begin its rustification brian m. carlson
2025-07-17 22:25   ` Taylor Blau
2025-07-18  0:29     ` brian m. carlson
2025-07-22 12:21       ` Patrick Steinhardt
2025-07-22 15:56         ` Junio C Hamano
2025-07-22 16:03     ` Sam James
2025-07-22 21:37       ` Elijah Newren
2025-07-22 21:55         ` Sam James
2025-07-22 22:08           ` Collin Funk
2025-07-18  9:23 ` Christian Brabandt
2025-07-18 16:26   ` Junio C Hamano
2025-07-19  0:32     ` Elijah Newren
2025-07-18 13:34 ` Phillip Wood
2025-07-18 21:25   ` Eli Schwartz
2025-07-19  0:48     ` Haelwenn (lanodan) Monnier
2025-07-22 12:21       ` Patrick Steinhardt
2025-07-22 14:24     ` Patrick Steinhardt
2025-07-22 15:14       ` Eli Schwartz
2025-07-22 15:56       ` Sam James
2025-07-23  4:32         ` Patrick Steinhardt
2025-07-24  9:01           ` Pierre-Emmanuel Patry
2025-07-24 10:00             ` Patrick Steinhardt
2025-07-28  9:06               ` Pierre-Emmanuel Patry
2025-07-18 14:38 ` Junio C Hamano
2025-07-18 21:56   ` Ezekiel Newren
2025-07-21 10:14   ` Phillip Wood
2025-07-21 18:33     ` Junio C Hamano
2025-07-19 21:53 ` Johannes Schindelin
2025-07-20  8:45   ` Matthias Aßhauer
2025-08-15  1:22 ` [PATCH v2 00/17] " Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 01/17] doc: add a policy for using Rust brian m. carlson via GitGitGadget
2025-08-15 17:03     ` Matthias Aßhauer
2025-08-15 21:31       ` Junio C Hamano
2025-08-16  8:06         ` Matthias Aßhauer
2025-08-19  2:06       ` Ezekiel Newren
2025-08-15  1:22   ` [PATCH v2 02/17] xdiff: introduce rust Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 03/17] xdiff/xprepare: remove superfluous forward declarations Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 04/17] xdiff: delete unnecessary fields from xrecord_t and xdfile_t Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 05/17] xdiff: make fields of xrecord_t Rust friendly Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 06/17] xdiff: separate parsing lines from hashing them Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 07/17] xdiff: conditionally use Rust's implementation of xxhash Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 08/17] github workflows: install rust Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 09/17] Do support Windows again after requiring Rust Johannes Schindelin via GitGitGadget
2025-08-15 17:12     ` Matthias Aßhauer
2025-08-15 21:48       ` Junio C Hamano
2025-08-15 22:11         ` Johannes Schindelin
2025-08-15 23:37           ` Junio C Hamano
2025-08-15 23:37         ` Junio C Hamano
2025-08-16  8:53         ` Matthias Aßhauer
2025-08-17 15:57           ` Junio C Hamano
2025-08-19  2:22       ` Ezekiel Newren
2025-08-15  1:22   ` [PATCH v2 10/17] win+Meson: allow for xdiff to be compiled with MSVC Johannes Schindelin via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 11/17] win+Meson: do allow linking with the Rust-built xdiff Johannes Schindelin via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 12/17] github workflows: define rust versions and targets in the same place Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 13/17] github workflows: upload Cargo.lock Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 14/17] xdiff: implement a white space iterator in Rust Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 15/17] xdiff: create line_hash() and line_equal() Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 16/17] xdiff: optimize case where --ignore-cr-at-eol is the only whitespace flag Ezekiel Newren via GitGitGadget
2025-08-15  1:22   ` [PATCH v2 17/17] xdiff: use rust's version of whitespace processing Ezekiel Newren via GitGitGadget
2025-08-15 15:07   ` [-SPAM-] [PATCH v2 00/17] RFC: Accelerate xdiff and begin its rustification Ramsay Jones
2025-08-19  2:00     ` Elijah Newren
2025-08-24 16:52       ` Patrick Steinhardt
2025-08-18 22:31   ` Junio C Hamano
2025-08-18 23:52     ` Ben Knoble
2025-08-19  1:52     ` Elijah Newren
2025-08-19  9:47       ` Junio C Hamano
2025-08-23  3:55   ` [PATCH v3 00/15] RFC: Cleanup " Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 01/15] doc: add a policy for using Rust brian m. carlson via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 02/15] xdiff: introduce rust Ezekiel Newren via GitGitGadget
2025-08-23 13:43       ` rsbecker
2025-08-23 14:26         ` Kristoffer Haugsbakk
2025-08-23 15:06           ` rsbecker
2025-08-23 18:30             ` Elijah Newren
2025-08-23 19:24               ` brian m. carlson
2025-08-23 20:04                 ` rsbecker
2025-08-23 20:36                 ` Sam James
2025-08-23 21:17                 ` Haelwenn (lanodan) Monnier
2025-08-27  1:57               ` Taylor Blau
2025-08-27 14:39                 ` rsbecker
2025-08-27 17:06                   ` Junio C Hamano
2025-08-27 17:15                     ` rsbecker
2025-08-27 20:12                     ` Taylor Blau
2025-08-27 20:22                       ` Junio C Hamano
2025-09-02 11:16                         ` Patrick Steinhardt
2025-09-02 11:30                           ` Sam James
2025-09-02 17:27                           ` brian m. carlson
2025-09-02 18:47                             ` Sam James
2025-09-03 18:22                               ` Collin Funk
2025-09-03  5:40                             ` Patrick Steinhardt
2025-09-03 16:22                               ` Ramsay Jones
2025-09-03 22:10                               ` Junio C Hamano
2025-09-03 22:48                                 ` Josh Steadmon
2025-09-04 11:10                                 ` Patrick Steinhardt
2025-09-04 15:45                                   ` Junio C Hamano
2025-09-05  8:23                                     ` Patrick Steinhardt
2025-09-04  0:57                               ` brian m. carlson [this message]
2025-09-04 11:39                                 ` Patrick Steinhardt
2025-09-04 13:53                                   ` Sam James
2025-09-05  3:55                                     ` Elijah Newren
2025-09-04 23:17                                   ` Ezekiel Newren
2025-09-05  3:54                                   ` Elijah Newren
2025-09-05  6:50                                     ` Patrick Steinhardt
2025-09-07  4:10                                       ` Elijah Newren
2025-09-07 16:09                                         ` rsbecker
2025-09-08 10:12                                           ` Phillip Wood
2025-09-08 15:32                                             ` rsbecker
2025-09-08 15:10                                           ` Ezekiel Newren
2025-09-08 15:41                                             ` rsbecker
2025-09-08 15:31                                           ` Elijah Newren
2025-09-08 15:36                                             ` rsbecker
2025-09-08 16:13                                               ` Elijah Newren
2025-09-08 17:01                                                 ` rsbecker
2025-09-08  6:40                                         ` Patrick Steinhardt
2025-09-05 10:31                                     ` Phillip Wood
2025-09-05 11:32                                       ` Sam James
2025-09-05 13:14                                       ` Phillip Wood
2025-09-05 13:23                                         ` Patrick Steinhardt
2025-09-05 15:37                                         ` Junio C Hamano
2025-09-08  6:40                                           ` Patrick Steinhardt
2025-08-23 14:29         ` Ezekiel Newren
2025-08-23  3:55     ` [PATCH v3 03/15] github workflows: install rust Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 04/15] win+Meson: do allow linking with the Rust-built xdiff Johannes Schindelin via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 05/15] github workflows: upload Cargo.lock Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 06/15] ivec: create a vector type that is interoperable between C and Rust Ezekiel Newren via GitGitGadget
2025-08-23  8:12       ` Kristoffer Haugsbakk
2025-08-23  9:29         ` Ezekiel Newren
2025-08-23 16:14       ` Junio C Hamano
2025-08-23 16:37         ` Ezekiel Newren
2025-08-23 18:05       ` Junio C Hamano
2025-08-23 20:29         ` Ezekiel Newren
2025-08-25 19:16         ` Elijah Newren
2025-08-26  5:40           ` Junio C Hamano
2025-08-24 13:31       ` Ben Knoble
2025-08-25 20:40         ` Ezekiel Newren
2025-08-26 13:30           ` D. Ben Knoble
2025-08-26 18:47             ` Ezekiel Newren
2025-08-26 22:01               ` brian m. carlson
2025-08-23  3:55     ` [PATCH v3 07/15] xdiff/xprepare: remove superfluous forward declarations Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 08/15] xdiff: delete unnecessary fields from xrecord_t and xdfile_t Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 09/15] xdiff: make fields of xrecord_t Rust friendly Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 10/15] xdiff: use one definition for freeing xdfile_t Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 11/15] xdiff: replace chastore with an ivec in xdfile_t Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 12/15] xdiff: delete nrec field from xdfile_t Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 13/15] xdiff: delete recs " Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 14/15] xdiff: make xdfile_t more rust friendly Ezekiel Newren via GitGitGadget
2025-08-23  3:55     ` [PATCH v3 15/15] xdiff: implement xdl_trim_ends() in Rust Ezekiel Newren via GitGitGadget

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=aLjj9cG9_K6YLfeA@fruit.crustytoothpaste.net \
    --to=sandals@crustytoothpaste.net \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=ben.knoble@gmail.com \
    --cc=calvinwan@google.com \
    --cc=cb@256bit.org \
    --cc=collin.funk1@gmail.com \
    --cc=contact@hacktivis.me \
    --cc=eschwartz@gentoo.org \
    --cc=ezekielnewren@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=gitgitgadget@gmail.com \
    --cc=gitster@pobox.com \
    --cc=kristofferhaugsbakk@fastmail.com \
    --cc=me@ttaylorr.com \
    --cc=mh@glandium.org \
    --cc=mha1993@live.de \
    --cc=newren@gmail.com \
    --cc=phillip.wood123@gmail.com \
    --cc=pierre-emmanuel.patry@embecosm.com \
    --cc=ps@pks.im \
    --cc=ramsay@ramsayjones.plus.com \
    --cc=rsbecker@nexbridge.com \
    --cc=sam@gentoo.org \
    --cc=steadmon@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).