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

Re: [PATCH v5 7/9] BreakingChanges: announce Rust becoming mandatory

From
brian m. carlson <sandals@crustytoothpaste.net>
Date
Sep 18, 2025, 01:19 UTC
Message-ID
<aMteF4VTq2C5sAhK@fruit.crustytoothpaste.net>
In-Reply-To
<aMsxhp6ZO2Cdz7+k@szeder.dev>
On 2025-09-17 at 22:09:10, SZEDER Gábor wrote:
Show 10 quoted lines
> Providing an LTS release for those platforms that can't jump on the
> Rust bandwagon is great, but...
> 
> Git 3.0 will switch the default hash algorithm for newly initialized
> repositories to SHA-256, which, presumably, will also encourage SHA-1
> -> SHA-256 migrations in existing repositories.  Alas, it appears that
> the SHA-1/SHA-256 interop feature will only be available in Rust.
> 
> How will this affect those platforms without Rust?  What will and
> won't work on such platforms?

On Git 3.0, nothing will work without Rust because it will be mandatory. However, people who want to perform the conversion can do that by booting a Linux VM[0] and converting the repository there, then pushing it somewhere. The only inconvenience is that you'll have to have a flag day for working with the repository on older Git: you won't be able to dynamically pull from or push to a repository with a different main algorithm than you.

One of my first patches is that setting extensions.compatObjectFormat without Rust will simply die and say that's not supported. If that config value is unset, then Git up to 3.0 will simply function as normal, so full single-hash compatibility is assured. We already have that: SHA-256 repositories work just fine with SHA-256 remotes and SHA-1 repositories work just fine with SHA-1 remotes, but they're currently not interoperable.

> I think it should be called out explicitly in the justification that
> whatever limitations this imposes on those platforms with respect to
> hash function transition, the project has duly considered that and is
> OK with it.
I am fine with this and I don't think this is a problem.

I will mention that I have also already written the code in Rust and it is elegant and tidy and more efficient, better tested, and shorter than the equivalent C code. Writing the code also took much less time than the equivalent C code would have. I am not planning to rewrite it in C, since I already have a substantial amount of other interoperability work to do, so unless someone else is planning on doing so, the project has two choices: use the Rust code and accept that, or decide that they don't want the interoperability work for Git 3.0.

I want to point out that so far, all of the SHA-256 work, including the interoperability work, has been on my own time. I understand that my contributions to the project have to be acceptable to the project, but I also am not willing to rewrite a bunch of work because we already decided that we were going to do something and then changed our mind. If the project wants to be fickle on this matter, then other contributors can do the interoperability work on those terms.

I realize the decision to incorporate Rust was made recently, but the binary loose object maps are a blocker for some of the protocol work I'm doing, and if we want the interoperability functionality in Git 3.0 in a year, then I can't afford to wait here, since this kind of discussion tends to drag on extensively.

[0] Debian actually offers multiarch support, so as long as Debian has support for the architecture you're running on, you can boot a Debian VM of your native architecture, install amd64 or arm64 packages and QEMU, and then run those binaries in emulation. It will be slow, but it works for virtually all architectures. I've done something similar with risc64 containers on my amd64 laptop.

-- 
brian m. carlson (they/them)
Toronto, Ontario, CA
Previous: SZEDER GáborNext: SZEDER Gábor
Message 134 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.