git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH RFC v2 5/7] BreakingChanges: announce Rust becoming mandatory

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Sep 5, 2025, 19:34 UTC
Message-ID
<aLs7SwT-Gd6hXuvH@fruit.crustytoothpaste.net>
In-Reply-To
<11394b17-905a-4888-981c-c5b4a7f8cd62@gentoo.org>
On 2025-09-05 at 14:32:49, Eli Schwartz wrote:
Show 13 quoted lines
> LLVM is theoretically an open source project. So is Rust. We can ask
> people on those platforms how successful they have been at the political
> side of convincing the Rust project to allowlist the platforms inside
> low-level case statements of platform-specific defines, in order to
> attempt the first round of "try running make, see what breaks and start
> fixing it".
> 
> Hint: it did not go well, in the sense that the rust maintainers even
> accepted the validity of making a proposal in the first place.
> 
> LLVM is easier to work with, at least in that sense. But not all
> platforms are supported by LLVM either, and you do need a stable release
> of LLVM to support the platform before you can begin work on rust at all.

It is possible to build with a custom LLVM because all of the distributions do it, so it is possible to build the work out of tree and then add it when everything is ready. I mentioned elsewhere in the discussions that LLVM upstream said that work on IA-64 could continue out of tree and then it could be re-added if there was sufficient maintenance and support, so this is at least in theory a viable option.

If LLVM and Rust upstreams are just completely unreasonable and won't accept certain platforms at all (which I doubt), then distros can carry patches. It's not pretty and it's a bunch of hassle, but it's common.

I'll also say that LLVM is a pretty useful piece of software that most distros will want to have. It provides clangd, which is one of the the major C and C++ LSPs; it's used by Doxygen, which is a major documentation generator; and it's used by Mesa and PostgreSQL, which are pieces of software people will want to use. And, as well, it provides a complete compiler toolchain. So I think there are compelling reasons why porting LLVM is valuable functionality to have anyway, in addition to the fact that it also gets you most of the way towards Rust (and a variety of other, less common languages).

> That is the advantage of GCC-rs -- it has much broader platform support,
> so if the rust frontend works at all, it will likely also work on the
> specific platform you care about (and the GCC developers usually don't
> bite, even if you want to enable experimental support for new platforms).

I agree gccrs is a great project and of course I want it to succeed. Clearly having multiple independent implementations makes it easier to find bugs and increases portability. And if it means that we get better platform support, fantastic.

However, if your complaint is that Rust upstream will not allow platform-specific defines and other incremental work without support in LLVM or other core toolchain components, then I don't see how gccrs is going to convince them otherwise. I also pointed out elsewhere that the compiler is but one part of the equation and that libstd and libcore, which are shared between the implementations, plus their dependencies, are absolutely required for Rust to work on any platform. If Rust upstream doesn't allow support for the standard libraries, then distros will have to carry patches, gccrs or not.

To be clear, I do support this kind of incremental work since it's a valuable way to do large projects (and it's what I did for SHA-256 in Git and am doing for SHA-1/SHA-256 interop), but saying, "brian and other Git contributors say this is a good idea" may not be more convincing. To the extent I can encourage this kind of thing, I am happy to do so, though.

> > Do we want to commit to promising support until gccrs is ready? What if
> > gccrs ends up abandoned? Or takes an unexpectedly long time to reach a
> > stage where it can build Git? It might make sense to give this LTS
> > release a time limit instead, or in addidtion.

I think a two-year limit is reasonable. As anyone who speaks Spanish will tell you, there's a degree of uncertainty when speculating about the future, so we cannot guarantee that gccrs, however promising it might currently appear, will be usable or viable in that time. We cannot agree to backport patches forever if gccrs doesn't materialize, so a time limit seems like a good idea.

_However_, I will state that I am interested in seeing if we can get mrustc to build Git's Rust code. I understand that it is not intended to do that (it's intended primarily to bootstrap Rust) and it definitely will require some patches to get working, but I think it's at least a possibility and it seems like a much lower effort way to solve the problem. It will probably involve some inconvenience on our part because it's very limited in its toolchain and fake cargo, but I would be willing to deal with said inconvenience for the purposes of portability. And it works now and is (for its limited purpose) actively maintained.

Show 10 quoted lines
> Well, that will one way or another mean users of such platforms cannot
> use git at all, not even old versions, lest they be hacked. Bit of a
> problem for an application that mainly exists for the purpose of
> communicating over the network. I suppose such platforms can finally
> leave the world of DVCSes, given:
> 
> - jj, breezy, and mercurial all use rust already
> - bitkeeper and monotone are dead
> - darcs is written in GHC (haskell) which is far less available than
>   rust

There are other Git-compatible options. There's Game of Trees, which uses Git repositories and is being designed by OpenBSD. It isn't drop-in compatible, since it's designed to meet the OpenBSD team's needs, but it appears to be basically functional (and is shipped in Debian, no less).

There's also libgit2 and Dulwich, which also implement Git repositories.

So there are options for people who want to use Git on platforms that don't support Rust. I suspect that the lack of Git on certain platforms will actually be more of a problem for those platforms than for Git, though.

-- 
brian m. carlson (they/them)
Toronto, Ontario, CA
Previous: Eli SchwartzNext: Elijah Newren
Message 56 of 210 in “Introduce Rust and announce that it will become mandatorty”
  1. 0/3 Introduce Rust and announce that it will become mandatortyPatrick Steinhardt, Sep 4, 2025
  2. 1/3 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 4, 2025
  3. Junio C HamanoSep 4, 2025
  4. Patrick SteinhardtSep 5, 2025
  5. brian m. carlsonSep 4, 2025
  6. Junio C HamanoSep 4, 2025
  7. Patrick SteinhardtSep 5, 2025
  8. Eli SchwartzSep 5, 2025
  9. Patrick SteinhardtSep 5, 2025
  10. Eli SchwartzSep 5, 2025
  11. 2/3 rust: implement a test balloon via the "varint" subsystemPatrick Steinhardt, Sep 4, 2025
  12. brian m. carlsonSep 4, 2025
  13. Patrick SteinhardtSep 5, 2025
  14. Ezekiel NewrenSep 4, 2025
  15. Eli SchwartzSep 5, 2025
  16. Patrick SteinhardtSep 5, 2025
  17. Eli SchwartzSep 5, 2025
  18. Ben KnobleSep 7, 2025
  19. Junio C HamanoSep 8, 2025
  20. Patrick SteinhardtSep 8, 2025
  21. Ben KnobleSep 9, 2025
  22. Junio C HamanoSep 9, 2025
  23. Patrick SteinhardtSep 8, 2025
  24. 3/3 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Sep 4, 2025
  25. Eric SunshineSep 4, 2025
  26. Patrick SteinhardtSep 5, 2025
  27. 0/7 Introduce Rust and announce that it will become mandatortyPatrick Steinhardt, Sep 5, 2025
  28. 1/7 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 5, 2025
  29. Justin ToblerSep 5, 2025
  30. Patrick SteinhardtSep 8, 2025
  31. Elijah NewrenSep 7, 2025
  32. Patrick SteinhardtSep 8, 2025
  33. 2/7 Makefile: introduce infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 5, 2025
  34. brian m. carlsonSep 5, 2025
  35. Patrick SteinhardtSep 8, 2025
  36. Elijah NewrenSep 7, 2025
  37. Patrick SteinhardtSep 8, 2025
  38. SZEDER GáborSep 7, 2025
  39. Patrick SteinhardtSep 8, 2025
  40. 3/7 help: report on whether or not Rust is enabledPatrick Steinhardt, Sep 5, 2025
  41. brian m. carlsonSep 5, 2025
  42. Elijah NewrenSep 7, 2025
  43. 4/7 rust: implement a test balloon via the "varint" subsystemPatrick Steinhardt, Sep 5, 2025
  44. Junio C HamanoSep 5, 2025
  45. Junio C HamanoSep 5, 2025
  46. brian m. carlsonSep 5, 2025
  47. 5/7 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Sep 5, 2025
  48. Matthias AßhauerSep 5, 2025
  49. Patrick SteinhardtSep 5, 2025
  50. Eli SchwartzSep 5, 2025
  51. Patrick SteinhardtSep 8, 2025
  52. Elijah NewrenSep 7, 2025
  53. Patrick SteinhardtSep 8, 2025
  54. Phillip WoodSep 5, 2025
  55. Eli SchwartzSep 5, 2025
  56. brian m. carlsonSep 5, 2025
  57. Elijah NewrenSep 7, 2025
  58. 6/7 ci: convert "pedantic" job into full build with breaking changesPatrick Steinhardt, Sep 5, 2025
  59. Junio C HamanoSep 7, 2025
  60. Patrick SteinhardtSep 8, 2025
  61. 7/7 ci: enable Rust for breaking-changes jobsPatrick Steinhardt, Sep 5, 2025
  62. brian m. carlsonSep 5, 2025
  63. Patrick SteinhardtSep 8, 2025
  64. Junio C HamanoSep 5, 2025
  65. Patrick SteinhardtSep 8, 2025
  66. Phillip WoodSep 5, 2025
  67. Patrick SteinhardtSep 5, 2025
  68. Elijah NewrenSep 7, 2025
  69. Patrick SteinhardtSep 8, 2025
  70. brian m. carlsonSep 8, 2025
  71. Patrick SteinhardtSep 10, 2025
  72. Elijah NewrenSep 9, 2025
  73. Patrick SteinhardtSep 10, 2025
  74. Phillip WoodSep 9, 2025
  75. Patrick SteinhardtSep 10, 2025
  76. Phillip WoodSep 10, 2025
  77. Patrick SteinhardtSep 10, 2025
  78. 0/8 Introduce Rust and announce that it will become mandatortyPatrick Steinhardt, Sep 8, 2025
  79. 1/8 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 8, 2025
  80. brian m. carlsonSep 8, 2025
  81. brian m. carlsonSep 9, 2025
  82. Patrick SteinhardtSep 10, 2025
  83. 2/8 Makefile: reorder sources after includesPatrick Steinhardt, Sep 8, 2025
  84. 3/8 Makefile: introduce infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 8, 2025
  85. 4/8 help: report on whether or not Rust is enabledPatrick Steinhardt, Sep 8, 2025
  86. 5/8 rust: implement a test balloon via the "varint" subsystemPatrick Steinhardt, Sep 8, 2025
  87. Ezekiel NewrenSep 8, 2025
  88. brian m. carlsonSep 8, 2025
  89. Patrick SteinhardtSep 10, 2025
  90. 6/8 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Sep 8, 2025
  91. 7/8 ci: convert "pedantic" job into full build with breaking changesPatrick Steinhardt, Sep 8, 2025
  92. 8/8 ci: enable Rust for breaking-changes jobsPatrick Steinhardt, Sep 8, 2025
  93. Kristoffer HaugsbakkSep 8, 2025
  94. 0/9 Introduce Rust and announce that it will become mandatoryPatrick Steinhardt, Sep 10, 2025
  95. 1/9 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 10, 2025
  96. brian m. carlsonSep 11, 2025
  97. D. Ben KnobleJan 20, 2026
  98. brian m. carlsonJan 20, 2026
  99. Patrick SteinhardtJan 21, 2026
  100. 2/9 Makefile: reorder sources after includesPatrick Steinhardt, Sep 10, 2025
  101. 3/9 Makefile: introduce infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 10, 2025
  102. 4/9 help: report on whether or not Rust is enabledPatrick Steinhardt, Sep 10, 2025
  103. 5/9 varint: use explicit width for integersPatrick Steinhardt, Sep 10, 2025
  104. Junio C HamanoSep 10, 2025
  105. 6/9 varint: reimplement as test balloon for RustPatrick Steinhardt, Sep 10, 2025
  106. 7/9 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Sep 10, 2025
  107. Junio C HamanoSep 10, 2025
  108. Patrick SteinhardtSep 15, 2025
  109. Junio C HamanoSep 22, 2025
  110. Patrick SteinhardtSep 23, 2025
  111. LTS "lieutenant", was Re: [PATCH RFC v4 7/9] BreakingChanges: announce Rust becoming mandatoryJohannes Schindelin, Sep 23, 2025
  112. Patrick SteinhardtSep 24, 2025
  113. Junio C HamanoSep 23, 2025
  114. Patrick SteinhardtSep 24, 2025
  115. Junio C HamanoSep 24, 2025
  116. Kristoffer HaugsbakkSep 10, 2025
  117. Patrick SteinhardtSep 15, 2025
  118. 8/9 ci: convert "pedantic" job into full build with breaking changesPatrick Steinhardt, Sep 10, 2025
  119. 9/9 ci: enable Rust for breaking-changes jobsPatrick Steinhardt, Sep 10, 2025
  120. brian m. carlsonSep 11, 2025
  121. Patrick SteinhardtSep 15, 2025
  122. SZEDER GáborSep 12, 2025
  123. Junio C HamanoSep 12, 2025
  124. Patrick SteinhardtSep 15, 2025
  125. 0/9 Introduce Rust and announce that it will become mandatoryPatrick Steinhardt, Sep 15, 2025
  126. 1/9 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 15, 2025
  127. 2/9 Makefile: reorder sources after includesPatrick Steinhardt, Sep 15, 2025
  128. 3/9 Makefile: introduce infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 15, 2025
  129. 4/9 help: report on whether or not Rust is enabledPatrick Steinhardt, Sep 15, 2025
  130. 5/9 varint: use explicit width for integersPatrick Steinhardt, Sep 15, 2025
  131. 6/9 varint: reimplement as test balloon for RustPatrick Steinhardt, Sep 15, 2025
  132. 7/9 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Sep 15, 2025
  133. SZEDER GáborSep 17, 2025
  134. brian m. carlsonSep 18, 2025
  135. SZEDER GáborSep 22, 2025
  136. Junio C HamanoSep 22, 2025
  137. brian m. carlsonSep 22, 2025
  138. Junio C HamanoSep 22, 2025
  139. Elijah NewrenSep 23, 2025
  140. Patrick SteinhardtSep 23, 2025
  141. Junio C HamanoSep 23, 2025
  142. Ezekiel NewrenSep 23, 2025
  143. Phillip WoodSep 19, 2025
  144. Patrick SteinhardtSep 22, 2025
  145. Phillip WoodSep 22, 2025
  146. Patrick SteinhardtSep 22, 2025
  147. 8/9 ci: convert "pedantic" job into full build with breaking changesPatrick Steinhardt, Sep 15, 2025
  148. 9/9 ci: enable Rust for breaking-changes jobsPatrick Steinhardt, Sep 15, 2025
  149. Junio C HamanoSep 15, 2025
  150. Ezekiel NewrenSep 16, 2025
  151. Patrick SteinhardtSep 16, 2025
  152. Sam JamesSep 17, 2025
  153. Ezekiel NewrenSep 17, 2025
  154. Ramsay JonesSep 16, 2025
  155. Ezekiel NewrenSep 16, 2025
  156. Ramsay JonesSep 17, 2025
  157. Elijah NewrenSep 18, 2025
  158. what's missing from newer C? [was: [PATCH v5 0/9] Introduce Rust ....]Eric Wong, Sep 25, 2025
  159. Ezekiel NewrenSep 26, 2025
  160. Eric WongOct 4, 2025
  161. Pierre-Emmanuel PatryOct 6, 2025
  162. John Paul Adrian GlaubitzSep 19, 2025
  163. Patrick SteinhardtSep 22, 2025
  164. 0/9 Introduce Rust and announce that it will become mandatoryPatrick Steinhardt, Sep 23, 2025
  165. 1/9 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 23, 2025
  166. 2/9 Makefile: reorder sources after includesPatrick Steinhardt, Sep 23, 2025
  167. 3/9 Makefile: introduce infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 23, 2025
  168. 4/9 help: report on whether or not Rust is enabledPatrick Steinhardt, Sep 23, 2025
  169. 5/9 varint: use explicit width for integersPatrick Steinhardt, Sep 23, 2025
  170. 6/9 varint: reimplement as test balloon for RustPatrick Steinhardt, Sep 23, 2025
  171. 7/9 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Sep 23, 2025
  172. Phillip WoodSep 23, 2025
  173. Junio C HamanoSep 23, 2025
  174. Patrick SteinhardtSep 24, 2025
  175. 8/9 ci: convert "pedantic" job into full build with breaking changesPatrick Steinhardt, Sep 23, 2025
  176. 9/9 ci: enable Rust for breaking-changes jobsPatrick Steinhardt, Sep 23, 2025
  177. Ezekiel NewrenSep 23, 2025
  178. Patrick SteinhardtSep 24, 2025
  179. Ezekiel NewrenSep 24, 2025
  180. 0/9 Introduce Rust and announce that it will become mandatoryPatrick Steinhardt, Sep 25, 2025
  181. 1/9 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 25, 2025
  182. 2/9 Makefile: reorder sources after includesPatrick Steinhardt, Sep 25, 2025
  183. Ramsay JonesSep 25, 2025
  184. 3/9 Makefile: introduce infrastructure to build internal Rust libraryPatrick Steinhardt, Sep 25, 2025
  185. 4/9 help: report on whether or not Rust is enabledPatrick Steinhardt, Sep 25, 2025
  186. 5/9 varint: use explicit width for integersPatrick Steinhardt, Sep 25, 2025
  187. Kristoffer HaugsbakkSep 30, 2025
  188. Ezekiel NewrenOct 1, 2025
  189. Patrick SteinhardtOct 2, 2025
  190. 6/9 varint: reimplement as test balloon for RustPatrick Steinhardt, Sep 25, 2025
  191. Ezekiel NewrenOct 1, 2025
  192. Junio C HamanoOct 1, 2025
  193. 7/9 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Sep 25, 2025
  194. 8/9 ci: convert "pedantic" job into full build with breaking changesPatrick Steinhardt, Sep 25, 2025
  195. 9/9 ci: enable Rust for breaking-changes jobsPatrick Steinhardt, Sep 25, 2025
  196. Junio C HamanoSep 25, 2025
  197. Ezekiel NewrenOct 1, 2025
  198. 0/9 Introduce Rust and announce that it will become mandatoryPatrick Steinhardt, Oct 2, 2025
  199. 1/9 meson: add infrastructure to build internal Rust libraryPatrick Steinhardt, Oct 2, 2025
  200. 2/9 Makefile: reorder sources after includesPatrick Steinhardt, Oct 2, 2025
  201. 3/9 Makefile: introduce infrastructure to build internal Rust libraryPatrick Steinhardt, Oct 2, 2025
  202. 4/9 help: report on whether or not Rust is enabledPatrick Steinhardt, Oct 2, 2025
  203. 5/9 varint: use explicit width for integersPatrick Steinhardt, Oct 2, 2025
  204. 6/9 varint: reimplement as test balloon for RustPatrick Steinhardt, Oct 2, 2025
  205. 7/9 BreakingChanges: announce Rust becoming mandatoryPatrick Steinhardt, Oct 2, 2025
  206. 8/9 ci: convert "pedantic" job into full build with breaking changesPatrick Steinhardt, Oct 2, 2025
  207. 9/9 ci: enable Rust for breaking-changes jobsPatrick Steinhardt, Oct 2, 2025
  208. Junio C HamanoOct 2, 2025
  209. Patrick SteinhardtOct 7, 2025
  210. Ezekiel NewrenOct 2, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.