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

[DISCUSS] Introducing Rust into the Git project

From
Taylor Blau <me@ttaylorr.com>
Date
Jan 10, 2024, 20:16 UTC
Message-ID
<ZZ77NQkSuiRxRDwt@nand.local>

Over the holiday break at the end of last year I spent some time thinking on what it would take to introduce Rust into the Git project.

There is significant work underway to introduce Rust into the Linux kernel (see [1], [2]). Among their stated goals, I think there are a few which could be potentially relevant to the Git project:

  - Lower risk of memory safety bugs, data races, memory leaks, etc.
    thanks to the language's safety guarantees.
  - Easier to gain confidence when refactoring or introducing new code
    in Rust (assuming little to no use of the language's `unsafe`
    feature).
  - Contributing to Git becomes easier and accessible to a broader group
    of programmers by relying on a more modern language.

Given the allure of these benefits, I think it's at least worth considering and discussing how Rust might make its way into Junio's tree.

I imagine that the transition state would involve some parts of the project being built in C and calling into Rust code via FFI (and perhaps vice-versa, with Rust code calling back into the existing C codebase). Luckily for us, Rust's FFI provides a zero-cost abstraction [3], meaning there is no performance impact when calling code from one language in the other.

Some open questions from me, at least to get the discussion going are:
  1. Platform support. The Rust compiler (rustc) does not enjoy the same
     widespread availability that C compilers do. For instance, I
     suspect that NonStop, AIX, Solaris, among others may not be
     supported.
     One possible alternative is to have those platforms use a Rust
     front-end for a compiler that they do support. The gccrs [4]
     project would allow us to compile Rust anywhere where GCC is
     available. The rustc_codegen_gcc [5] project uses GCC's libgccjit
     API to target GCC from rustc itself.
  2. Migration. What parts of Git are easiest to convert to Rust? My
     hunch is that the answer is any stand-alone libraries, like
     strbuf.h. I'm not sure how we should identify these, though, and in
     what order we would want to move them over.
  3. Interaction with the lib-ification effort. There is lots of work
     going on in an effort to lib-ify much of the Git codebase done by
     Google. I'm not sure how this would interact with that effort, but
     we should make sure that one isn't a blocker for the other.

I'm curious to hear what others think about this. I think that this would be an exciting and worthwhile direction for the project. Let's see!

Thanks, Taylor

[1]: https://rust-for-linux.com/ [2]: https://lore.kernel.org/rust-for-linux/20210414184604.23473-1-ojeda@kernel.org/ [3]: https://blog.rust-lang.org/2015/04/24/Rust-Once-Run-Everywhere.html#c-talking-to-rust [4]: https://github.com/Rust-GCC/gccrs [5]: https://github.com/rust-lang/rustc_codegen_gcc

Next: Dragan Simic
Message 1 of 38 in “[DISCUSS] Introducing Rust into the Git project”
  1. Taylor BlauJan 10, 2024
  2. Dragan SimicJan 10, 2024
  3. Junio C HamanoJan 10, 2024
  4. rsbecker@nexbridge.comJan 10, 2024
  5. Taylor BlauJan 10, 2024
  6. rsbecker@nexbridge.comJan 10, 2024
  7. Elijah NewrenJan 11, 2024
  8. rsbecker@nexbridge.comJan 11, 2024
  9. Elijah NewrenJan 11, 2024
  10. rsbecker@nexbridge.comJan 11, 2024
  11. Elijah NewrenJan 11, 2024
  12. Patrick SteinhardtJan 11, 2024
  13. rsbecker@nexbridge.comJan 11, 2024
  14. brian m. carlsonJan 11, 2024
  15. rsbecker@nexbridge.comJan 11, 2024
  16. Trevor GrossJan 11, 2024
  17. rsbecker@nexbridge.comJan 11, 2024
  18. Trevor GrossJan 11, 2024
  19. Defining a platform support policy (Was: [DISCUSS] Introducing Rust into the Git project)Emily Shaffer, Jan 22, 2024
  20. rsbecker@nexbridge.comJan 23, 2024
  21. Junio C HamanoJan 23, 2024
  22. Junio C HamanoJan 23, 2024
  23. Elijah NewrenJan 24, 2024
  24. brian m. carlsonJan 10, 2024
  25. Elijah NewrenJan 11, 2024
  26. Dragan SimicJan 11, 2024
  27. Elijah NewrenJan 11, 2024
  28. Dragan SimicJan 17, 2024
  29. Elijah NewrenJan 24, 2024
  30. Dragan SimicJan 24, 2024
  31. Elijah NewrenJan 11, 2024
  32. Dragan SimicJan 11, 2024
  33. brian m. carlsonJan 11, 2024
  34. Sam JamesJan 11, 2024
  35. brian m. carlsonJan 11, 2024
  36. Sam JamesJan 12, 2024
  37. Antoni BoucherJan 12, 2024
  38. Trevor GrossJan 11, 2024

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.