<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: schacon</title><link>https://news.ycombinator.com/user?id=schacon</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 18 Jun 2026 07:55:39 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=schacon" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>Relicensing under any other license, including the LGPL, is exactly the same thing. Either the reimplementation copies protected expression, in which case it would be required to be GPL-2.0-only, or it does not, in which case we can choose the most fitting license.<p>If you believe that using an MIT license is not correct, then you defacto also believe that using an LGPL license is not correct.</p>
]]></description><pubDate>Thu, 11 Jun 2026 13:27:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=48490079</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48490079</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48490079</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>> Would you be happy for someone to do the same with the GitButler source code?<p>Honestly, that would be pretty awesome. We would be flattered.</p>
]]></description><pubDate>Thu, 11 Jun 2026 13:23:51 +0000</pubDate><link>https://news.ycombinator.com/item?id=48490014</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48490014</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48490014</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>Nice, I haven't dug into this yet. If we can get this usable, it would be pretty cool to have a small lib or a series of much smaller, directed libs that can be used by simpler interfaces and you can just compose the parts you need.</p>
]]></description><pubDate>Wed, 10 Jun 2026 10:02:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=48473976</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48473976</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48473976</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>Not yet. I have a PR with a WASM experiment based on an earlier build, but it's not integrated. It's on my list of things to try. I _did_ get it working for some things, so it's clearly possible, but I need to put some more effort into it.</p>
]]></description><pubDate>Wed, 10 Jun 2026 09:48:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=48473886</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48473886</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48473886</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>Well, there's lots of really interesting opinions here from a lot of armchair lawyers.<p>To clarify, my stance on this is that the reimplementation did not copy protected expressions (Jplag reports less than 1.8% max similarity between the codebases), it's done in good faith, and it's what's best for the broader Git ecosystem (assuming Grit even becomes usable, which it's currently not purported to be).<p>From a copyright standpoint, however, only the first argument there is relevant. Grit is an independently authored implementation of Git-compatible behavior, with negligible similarity to Git source code.<p>I think antirez summarized the situation quite well and I broadly agree with his position: <a href="https://antirez.com/news/162" rel="nofollow">https://antirez.com/news/162</a><p>I think that those in the community who know me and have worked with me in the Git and open source communities for the last 20 years know that my intentions are to contribute, share and foster innovation and learning. Many of the main authors of the Git source code are friends of mine and I have no intention to steal anything from anyone, only to make their great ideas more broadly useful.</p>
]]></description><pubDate>Wed, 10 Jun 2026 09:44:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48473849</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48473849</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48473849</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>GitButler's source code is available, so we're not asking you to trust us much at all.<p><a href="https://github.com/gitbutlerapp/gitbutler" rel="nofollow">https://github.com/gitbutlerapp/gitbutler</a></p>
]]></description><pubDate>Wed, 10 Jun 2026 07:37:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=48472821</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48472821</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48472821</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>A feature complete, reentrant, linkable library. Reading the article often helps with questions like this.</p>
]]></description><pubDate>Wed, 10 Jun 2026 07:36:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48472815</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48472815</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48472815</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>As mentioned, we also work on the Gitoxide project and Byron is a member of our team. We are well aware of all large community efforts and we're also cohosting the Git Merge conference this year.<p>There is a recent effort to vibe-loop more Git into Gitoxide, which is interesting:<p><a href="https://github.com/GitoxideLabs/gitoxide/pull/2538" rel="nofollow">https://github.com/GitoxideLabs/gitoxide/pull/2538</a><p>I still think that this is a project that can have value with a little more work. This announcement is merely a milestone, not the end product. I wasn't sure it was really possible to do, even halfway through the project. There has been a lot learned and there is a lot to learn, but I think there are useful applications for both a high quality, hand crafted, opinionated partial Git library (Gix) as well as a vibed, fully implemented, partially sloppy LLM Git library (Grit). We think it's worth exploring and investing in both options for now.<p>Also, I am the exec involved and I've done quite a lot for the Git community over the years. I would never try to have my "own copy" of it, that's ridiculous. I wrote and open sourced the Pro Git book (<a href="https://git-scm.com/book/en/v2" rel="nofollow">https://git-scm.com/book/en/v2</a>) and Git community book before it (<a href="https://schacon.github.io/gitbook/index.html" rel="nofollow">https://schacon.github.io/gitbook/index.html</a>), I created the official Git website (<a href="https://git-scm.com" rel="nofollow">https://git-scm.com</a>), I cofounded GitHub which hosts nearly all open source in the world, I have evangelized and supported the Git ecosystem for almost 20 years now. I restarted and funded development of libgit2 15 years ago, which you could similarly argue was an exec trying to have our "own copy" of Git under a more permissive license and would have been a similarly ridiculous argument.</p>
]]></description><pubDate>Wed, 10 Jun 2026 07:33:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=48472797</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48472797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48472797</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>I think Byron (Gix author/maintainer) is one of the most excited people about the Grit project.<p>Gitoxide is great and we will continue to push it forward. Grit is an orthogonal project. Perhaps we can use one in the other or maybe Grit goes nowhere. But we thought that a small investment in a different approach is worth the effort.</p>
]]></description><pubDate>Wed, 10 Jun 2026 07:15:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=48472633</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48472633</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48472633</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>I see it differently. I look at it as if I had written this code myself, using this same approach. Look at the docs, look at the tests, look at the source, implement something that is interactively compatible but a very different approach.<p>For example, this is exactly what I did when I tried to get SSH commit signing working properly in GitButler:<p><a href="https://blog.gitbutler.com/signing-commits-in-git-explained" rel="nofollow">https://blog.gitbutler.com/signing-commits-in-git-explained</a><p>You can see in the post that I dug through the C source to figure out how it was canonically done and then implemented something that accomplished the same thing in Rust but without copying source code.<p>There are some similarities between the Grit Rust source and the Git source, but it's mostly around time/formatting type things or byte offset type things needed to make packfile parsing and whatnot work, but as far as I can tell, there is no straightforward copying of code. The approach needed to make this a reentrant, memory safe, library driven codebase is so different that copying is generally not useful. But nobody can _guess_ how packfiles or reftable binary formats are specified, since they're not really documented. I'm aware of this because I'm pretty sure I _personally_ am one of the only ones who has ever attempted to document the packfile binary format: <a href="https://schacon.github.io/gitbook/7_the_packfile.html" rel="nofollow">https://schacon.github.io/gitbook/7_the_packfile.html</a><p>You have to read the source. Which means that libgit2 and Gitoxide and every other Git reimplementation is also "license-washing" per this definition because they also had to reference the Git source to see what the technical specification is.<p>If you find any code in Grit that is clearly line-for-line copied, please point it out and I will replace it. But the Git source is the Git specification and every reimplementation, LLM or not, is forced to use this approach to build anything compatible.</p>
]]></description><pubDate>Wed, 10 Jun 2026 06:34:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=48472293</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48472293</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48472293</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>To be clear, I 100% did not make libgit. I did help the libgit2 project get off the ground.</p>
]]></description><pubDate>Wed, 10 Jun 2026 03:08:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470918</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470918</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>I'm assuming you didn't read the article, since I'm pretty sure I covered all of this, but I'm happy to respond.<p>Don't bother.<p>It's probably not for you. It's slower, more obtuse, more bloated, less capable, exponentially less scalable at any size. Canonical Git is better in every way, except being a linkable library.<p>Even in the arena of being linkable libraries that can do Git stuff, both Gitoxide (Rust) and libgit2 (C which has git2 crate Rust bindings) are both better, they're just not feature complete. That is the only point of this project.</p>
]]></description><pubDate>Wed, 10 Jun 2026 03:05:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470896</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470896</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470896</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>We're choosing a license that is usable by the entire community. Our goal is a linkable library, which makes GPL impossible. If we had chosen to go with LGPL or GPL with linking exception (like libgit2), it would have the same issue of changing the license, so we went with whatever was the most permissive so everyone could use it for anything if they wish. This has nothing to do with business - I hope I can get the project to the point where Jujutsu or whomever can use whatever is valuable here for whatever they want.<p>We clearly learned from how Git does operations and emulated it in order to function interoperably, the same way that Gitoxide and libgit2 have, and released it under a license that would be the most valuable for people wanting to use a linkable library, the same way that Gitoxide and libgit2 have.</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:58:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470838</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470838</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470838</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>Gitoxide is also developed primarily by Byron, who also is part of the GitButler team. We're pushing both projects forward.</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:54:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470797</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470797</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470797</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>I'm happy to take contributions if you want to throw some tokens at it. Bug reports would be amazing, since I haven't tested it for real very much (enough to know you can do basics).<p>I want to get it to the point where we can replace fork/exec'ing to an unknown Git binary or having said binary be an external dependency for GitButler. The networking stuff (push/fetch) is currently an external dep for both GitButler and Jujutsu (and pretty much every other Git-based tool in the world). I'm pretty sure I can get the project good enough at these networking ops (including all the hairy credential stuff) to be able to not need those fork/exec calls.</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:53:09 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470790</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470790</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470790</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>I started the project as Gust, but felt like Grit was such a better name. I asked Tom if I could boot the name back up again because I always liked it and he said it was fine.<p>Also, I worked on the Ruby Grit pretty extensively during the early days of GitHub, so hopefully I earned the right to carry on the mantle. :)</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:50:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470760</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470760</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470760</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>I would not use this except to help us test it if interested. I'm announcing it because it's interesting and a milestone in the breadth of test coverage it can pass. It almost certainly cheated on a bunch of those tests and is not feature complete yet.<p>The author of gitoxide is also working on GitButler (who worked on this project) and we're pushing both projects forward and actively using and developing Gitoxide as well. This is simply a different and hopefully complimentary approach to the same problem.</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:47:06 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470735</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470735</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470735</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>libgit.a isn't reentrant. It will call `die()` on many errors. If you link to it in a long running binary, it will kill your process on error.<p>Libgit2 is meant to address this and I was heavily involved in the development of that project 15 years ago. It's great but it's not feature complete and it's development is also completely separate from git development, so it's out of sync and constantly struggling to keep up.</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:43:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470705</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470705</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470705</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>My intent with this project is not to replace Git in any way. I don't care about the CLI part of this project.<p>The point is to provide a feature-complete reentrant linkable library. Even if it's an ugly and slow one, this is still the only one thing that exists that covers those points - Gitoxide and libgit2 are both awesome but they are not feature complete.</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:40:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470689</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470689</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470689</guid></item><item><title><![CDATA[New comment by schacon in "Grit: Rewriting Git in Rust with agents"]]></title><description><![CDATA[
<p>I would also be interested.<p>I haven't dug into this at all yet, nor have I tried to optimize the size (or really, anything else).<p>However, the library part will be less than half of this - a lot of code is spent on the CLI specific stuff and would not be part of the library, which is mostly what I care about for the purposes of this project. The CLI part is just to try to prove the point that it actually does what Git does. The library part is what might be useful in that nothing else exists that does all of the things that it does (provide a reentrant linkable library that is feature complete with Git).</p>
]]></description><pubDate>Wed, 10 Jun 2026 02:37:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=48470661</link><dc:creator>schacon</dc:creator><comments>https://news.ycombinator.com/item?id=48470661</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48470661</guid></item></channel></rss>