Message ID | cover.1723242556.git.steadmon@google.com (mailing list archive) |
---|---|
Headers | show |
Series | Introduce cgit-rs, a Rust wrapper around libgit.a | expand |
Josh Steadmon <steadmon@google.com> writes: > This series provides two small Rust wrapper libraries around parts of > Git: "cgit-sys", which exposes a few functions from libgit.a, and > "cgit", which provides a more Rust-friendly interface to some of those > functions. In addition to included unit tests, at $DAYJOB we have tested > building JJ[1] with our library and used it to replace some of the > libgit2-rs uses. Thanks, queued.
Still the same name for v2? Cmon.
On 2024-08-10 15:15, Jason A. Donenfeld wrote:
> Still the same name for v2? Cmon.
Yeah, I was also surprised to see that. This _isn't_ cgit.
On Sun, Aug 11, 2024 at 1:27 PM Dragan Simic <dsimic@manjaro.org> wrote: > On 2024-08-10 15:15, Jason A. Donenfeld wrote: > > Still the same name for v2? Cmon. > > Yeah, I was also surprised to see that. This _isn't_ cgit. Josh addressed this point in the v2 cover letter by saying: Known NEEDSWORK: ... * Bikeshed on the name
On 2024-08-12 01:03, Eric Sunshine wrote: > On Sun, Aug 11, 2024 at 1:27 PM Dragan Simic <dsimic@manjaro.org> > wrote: >> On 2024-08-10 15:15, Jason A. Donenfeld wrote: >> > Still the same name for v2? Cmon. >> >> Yeah, I was also surprised to see that. This _isn't_ cgit. > > Josh addressed this point in the v2 cover letter by saying: > > Known NEEDSWORK: > ... > * Bikeshed on the name But didn't Junio already say that the v2 of this series will be merged as-is? [1] That's what actually made me surprised and confused. [1] https://lore.kernel.org/git/xmqqfrrd9slb.fsf@gitster.g/
On Sun, Aug 11, 2024 at 7:23 PM Dragan Simic <dsimic@manjaro.org> wrote: > On 2024-08-12 01:03, Eric Sunshine wrote: > > Josh addressed this point in the v2 cover letter by saying: > > > > Known NEEDSWORK: > > ... > > * Bikeshed on the name > > But didn't Junio already say that the v2 of this series will be merged > as-is? [1] That's what actually made me surprised and confused. > > [1] https://lore.kernel.org/git/xmqqfrrd9slb.fsf@gitster.g/ That only means that Junio placed the topic in his "seen" branch, however, no promises about ultimate acceptance are attached to topics in that branch. Quoting from Junio's "What's Cooking" emails (such as [*]): Commits prefixed with '-' are only in 'seen', and aren't considered "accepted" at all and may be annotated with an URL to a message that raises issues but they are no means exhaustive. A topic without enough support may be discarded after a long period of no activity (of course they can be resubmit when new interests arise). [*]: https://lore.kernel.org/git/xmqqo762frkz.fsf@gitster.g/
On 2024-08-12 01:33, Eric Sunshine wrote: > On Sun, Aug 11, 2024 at 7:23 PM Dragan Simic <dsimic@manjaro.org> > wrote: >> On 2024-08-12 01:03, Eric Sunshine wrote: >> > Josh addressed this point in the v2 cover letter by saying: >> > >> > Known NEEDSWORK: >> > ... >> > * Bikeshed on the name >> >> But didn't Junio already say that the v2 of this series will be merged >> as-is? [1] That's what actually made me surprised and confused. >> >> [1] https://lore.kernel.org/git/xmqqfrrd9slb.fsf@gitster.g/ > > That only means that Junio placed the topic in his "seen" branch, > however, no promises about ultimate acceptance are attached to topics > in that branch. Quoting from Junio's "What's Cooking" emails (such as > [*]): > > Commits prefixed with '-' are only in 'seen', and aren't > considered "accepted" at all and may be annotated with an URL to a > message that raises issues but they are no means exhaustive. A > topic without enough support may be discarded after a long period > of no activity (of course they can be resubmit when new interests > arise). > > [*]: https://lore.kernel.org/git/xmqqo762frkz.fsf@gitster.g/ Ah, good, thanks for the clarification. It's all fine then, as far as I'm concerned.
Eric Sunshine <sunshine@sunshineco.com> writes: > On Sun, Aug 11, 2024 at 1:27 PM Dragan Simic <dsimic@manjaro.org> wrote: >> On 2024-08-10 15:15, Jason A. Donenfeld wrote: >> > Still the same name for v2? Cmon. >> >> Yeah, I was also surprised to see that. This _isn't_ cgit. > > Josh addressed this point in the v2 cover letter by saying: > > Known NEEDSWORK: > ... > * Bikeshed on the name I do not quite consider it as as "addressed this point" to just slap a NEEDSWORK label and doing nothing else, though. The original iteration had this: * bikeshedding on the name (yes, really). There is an active, unrelated CGit project [4] that we only recently became aware of. We originally took the name "cgit" because at $DAYJOB we sometimes refer to git.git as "cgit" to distinguish it from jgit [5]. and then now they as well as reviewers all have seen the tentative cgit name, saw the reaction it caused, and now know that not just potentially confusing other project _exists_, but it does matter. Reviewers already have spent some time on suggesting that "git" part should not be "c"git, as well as "rs" part may better be "sys", etc.?. There should be _some_ response, even if it does not yet propose a new name. If it acknowledged that the time and knowledge reviewers gave the topic were appreciated, e.g., "The proposers of this topic saw THIS point and THAT point as a input that we WILL need to consider when we decide on the name. We acknowledge that the name "cgit-rs" is not ideal and needs to be changed. But we haven't reached any concrete alternative name yet, so this round still uses the same name", I'd call that "addressed this point", though. But just a dismissing "Bikeshed on the name", as if they do not care to be mistaken as saying "those who complain about the name are only bikeshedding and not worth listening to"? We should do better than that.
On Mon, Aug 12, 2024 at 4:15 AM Junio C Hamano <gitster@pobox.com> wrote: > The original iteration had this: > > * bikeshedding on the name (yes, really). There is an active, unrelated > CGit project [4] that we only recently became aware of. We originally > took the name "cgit" because at $DAYJOB we sometimes refer to git.git > as "cgit" to distinguish it from jgit [5]. A tangent: Speaking of external/other projects, I don't think we've seen an explanation yet as to why this Rust wrapper is proposed as a `contrib/` item of Git itself, as opposed to being a separate project. I can only think of two possible reasons why they might want it in the Git project itself... (1) Easier access to the library portions of Git ("libgit") since that portion of the code is not otherwise published as a standalone library. However, a workable alternative would be for the Rust wrapper to carry its own "vendored"[1] copy of Git. This would also ensure more reliable builds since they wouldn't have to worry about the "libgit" API changing from under them, and can adjust for "libgit" API changes when they manually pull in a new vendored copy. Hence, I'm not convinced that this is a valid reason to carry the Rust wrapper in Git. (2) Perhaps the intention is that this Rust wrapper work will allow Rust to be used within Git itself[3]? If that's the case, then `contrib/` seems the wrong resting place for this code. On the other hand, as a standalone project, a big benefit is that the Rust wrapper could have its own release cadence distinct from Git, which would likely be very beneficial since it is such a young (indeed, nascent) library; it is likely that the maintainers will want to release early and often at this stage. [1]: Other Rust projects carry vendored copies of projects upon which they rely. For instance, the "native_tls" crate has a vendored copy of OpenSSL[2]. [2]: https://docs.rs/native-tls/latest/native_tls/#cargo-features [3]: https://lore.kernel.org/git/CABPp-BFWsWCGogqQ=haMsS4OhOdSwc3frcAxa6soQR5ORTceOA@mail.gmail.com/
On 2024-08-12 10:15, Junio C Hamano wrote: > Eric Sunshine <sunshine@sunshineco.com> writes: > >> On Sun, Aug 11, 2024 at 1:27 PM Dragan Simic <dsimic@manjaro.org> >> wrote: >>> On 2024-08-10 15:15, Jason A. Donenfeld wrote: >>> > Still the same name for v2? Cmon. >>> >>> Yeah, I was also surprised to see that. This _isn't_ cgit. >> >> Josh addressed this point in the v2 cover letter by saying: >> >> Known NEEDSWORK: >> ... >> * Bikeshed on the name > > I do not quite consider it as as "addressed this point" to just slap > a NEEDSWORK label and doing nothing else, though. > > The original iteration had this: > > * bikeshedding on the name (yes, really). There is an active, > unrelated > CGit project [4] that we only recently became aware of. We > originally > took the name "cgit" because at $DAYJOB we sometimes refer to > git.git > as "cgit" to distinguish it from jgit [5]. > > and then now they as well as reviewers all have seen the tentative > cgit name, saw the reaction it caused, and now know that not just > potentially confusing other project _exists_, but it does matter. > > Reviewers already have spent some time on suggesting that "git" part > should not be "c"git, as well as "rs" part may better be "sys", > etc.?. There should be _some_ response, even if it does not yet > propose a new name. > > If it acknowledged that the time and knowledge reviewers gave the > topic were appreciated, e.g., "The proposers of this topic saw THIS > point and THAT point as a input that we WILL need to consider when > we decide on the name. We acknowledge that the name "cgit-rs" is > not ideal and needs to be changed. But we haven't reached any > concrete alternative name yet, so this round still uses the same > name", I'd call that "addressed this point", though. > > But just a dismissing "Bikeshed on the name", as if they do not care > to be mistaken as saying "those who complain about the name are only > bikeshedding and not worth listening to"? > > We should do better than that. I really appreciate and support your response, Junio. Brushing it off originally as "bikeshedding" did leave a sour taste, because it presented the conflicting naming as a non-issue.
Eric Sunshine <sunshine@sunshineco.com> writes: > A tangent: Speaking of external/other projects, I don't think we've > seen an explanation yet as to why this Rust wrapper is proposed as a > `contrib/` item of Git itself, as opposed to being a separate project. > > I can only think of two possible reasons why they might want it in the > Git project itself... > > (1) Easier access to the library portions of Git ("libgit") since that > portion of the code is not otherwise published as a standalone > library. This is not a good reason at all, if we look at what (the real) cgit project does ;-), which is to bind us as their submodule. > (2) Perhaps the intention is that this Rust wrapper work will allow > Rust to be used within Git itself[3]? If that's the case, then > `contrib/` seems the wrong resting place for this code. The contrib/ hierarchy is a mixed bag, and we may want to clean it up by Git 3.0 happens. - We used to put things that one-way depend on Git that are (1) useless by themselves, if Git did not exist, and (2) Git can do fine without them in the contrib/ hierarchy. The primary reason for doing so was because the Git was young and relatively unknown, and our community was small. Even for an add-on that may be at most "nice to have" from Git's point of view, it made some sense to give these add-ons wider exposure by simply being bundled with Git. We stopped doing that after Git ecosystem have matured enough and encouraged them to move either up (i.e. prove that Git cannot really do fine without it because the add-on is so useful, and become the first class part of Git) or out (i.e. it may be a fine add-on, but there are other similar add-ons that aim to achieve the same, similar, or overlapping goal---unlike the nascent era of Git, it should be able to become an independent project to compete fairly with others on its merit alone). - We have some stuff like completion and prompt scripts that have proven that the end-user experience cannot be "fine without", but haven't moved out of "contrib/", mostly by inercia. - We also have things that are meant to help Git developers in the hierarchy (Cocci rules come to mind). This one could fall into that category, but I am not sure. > On the other hand, as a standalone project, a big benefit is that the > Rust wrapper could have its own release cadence distinct from Git, > which would likely be very beneficial since it is such a young > (indeed, nascent) library; it is likely that the maintainers will want > to release early and often at this stage. That's cgit approach. If something is useless if Git did not exist, but Git does not need it at all to function, that may be a sensible thing to do. If we plan to eventually be able to rewrite the logic for say history traveral or specifying "set of commits" in such a way that is more involved than just "those that can be reached from these tip commits excluding the ones that can be reached from those bottom commits" (in other words, "A..B C..D" that is not "^A B ^C D"), and find it unpleasant to do in C and want to employ Rust, for example, we'd certainly need it somewhere in _our_ tree. Perhaps by the time it happens we might have an extension/dll mechanism in such a way that those who do not want (or cannot build) certain extensions can opt out and these "optional" things would by convention live somewhere other than the main source code live, but even then, contrib/ sounds like a wrong place and we'd do so perhaps in extra/ or something. > [1]: Other Rust projects carry vendored copies of projects upon which > they rely. For instance, the "native_tls" crate has a vendored copy of > OpenSSL[2]. > > [2]: https://docs.rs/native-tls/latest/native_tls/#cargo-features > > [3]: https://lore.kernel.org/git/CABPp-BFWsWCGogqQ=haMsS4OhOdSwc3frcAxa6soQR5ORTceOA@mail.gmail.com/
On 2024.08.12 01:15, Junio C Hamano wrote: > Eric Sunshine <sunshine@sunshineco.com> writes: > > > On Sun, Aug 11, 2024 at 1:27 PM Dragan Simic <dsimic@manjaro.org> wrote: > >> On 2024-08-10 15:15, Jason A. Donenfeld wrote: > >> > Still the same name for v2? Cmon. > >> > >> Yeah, I was also surprised to see that. This _isn't_ cgit. > > > > Josh addressed this point in the v2 cover letter by saying: > > > > Known NEEDSWORK: > > ... > > * Bikeshed on the name > > I do not quite consider it as as "addressed this point" to just slap > a NEEDSWORK label and doing nothing else, though. > > The original iteration had this: > > * bikeshedding on the name (yes, really). There is an active, unrelated > CGit project [4] that we only recently became aware of. We originally > took the name "cgit" because at $DAYJOB we sometimes refer to git.git > as "cgit" to distinguish it from jgit [5]. > > and then now they as well as reviewers all have seen the tentative > cgit name, saw the reaction it caused, and now know that not just > potentially confusing other project _exists_, but it does matter. > > Reviewers already have spent some time on suggesting that "git" part > should not be "c"git, as well as "rs" part may better be "sys", > etc.?. There should be _some_ response, even if it does not yet > propose a new name. > > If it acknowledged that the time and knowledge reviewers gave the > topic were appreciated, e.g., "The proposers of this topic saw THIS > point and THAT point as a input that we WILL need to consider when > we decide on the name. We acknowledge that the name "cgit-rs" is > not ideal and needs to be changed. But we haven't reached any > concrete alternative name yet, so this round still uses the same > name", I'd call that "addressed this point", though. > > But just a dismissing "Bikeshed on the name", as if they do not care > to be mistaken as saying "those who complain about the name are only > bikeshedding and not worth listening to"? > > We should do better than that. I am quite surprised that people felt this was dismissive. So to be clear: yes, we need a new name before this lands in next. I thought that leaving that as a known needs-work item was sufficient to call that out, but I guess I was wrong. As far as proposed names go, I am not super happy with either "libgit" or "libgit3", because that seems confusing when we consider there are also a separate libgit2 and libgit2-rs projects. I know that we're using "libgit_" as a prefix for visible symbols at the moment, but I plan on renaming those once we have settled on the actual library name. I was avoiding addressing this topic in the hopes that folks might suggest additional name options, but as it stands right now, I'm leaning towards just "git-sys" for the low-level wrapper crate, "git" for the Rust API, and "git-rs" for the directory in contrib/ which will contain the crates.
On 2024.08.12 05:03, Eric Sunshine wrote: > On Mon, Aug 12, 2024 at 4:15 AM Junio C Hamano <gitster@pobox.com> wrote: > > The original iteration had this: > > > > * bikeshedding on the name (yes, really). There is an active, unrelated > > CGit project [4] that we only recently became aware of. We originally > > took the name "cgit" because at $DAYJOB we sometimes refer to git.git > > as "cgit" to distinguish it from jgit [5]. > > A tangent: Speaking of external/other projects, I don't think we've > seen an explanation yet as to why this Rust wrapper is proposed as a > `contrib/` item of Git itself, as opposed to being a separate project. > > I can only think of two possible reasons why they might want it in the > Git project itself... > > (1) Easier access to the library portions of Git ("libgit") since that > portion of the code is not otherwise published as a standalone > library. However, a workable alternative would be for the Rust wrapper > to carry its own "vendored"[1] copy of Git. This would also ensure > more reliable builds since they wouldn't have to worry about the > "libgit" API changing from under them, and can adjust for "libgit" API > changes when they manually pull in a new vendored copy. Hence, I'm not > convinced that this is a valid reason to carry the Rust wrapper in > Git. > > (2) Perhaps the intention is that this Rust wrapper work will allow > Rust to be used within Git itself[3]? If that's the case, then > `contrib/` seems the wrong resting place for this code. Neither, actually. We hope that by keeping the crate definition in the main Git repo and by allowing developers to optionally run them by default as part of CI and `make test`, we can catch breaking bugs as early as possible. We're also hoping that we'll get more attention from interested developers by staying in the main repo rather than in a separate project. > On the other hand, as a standalone project, a big benefit is that the > Rust wrapper could have its own release cadence distinct from Git, > which would likely be very beneficial since it is such a young > (indeed, nascent) library; it is likely that the maintainers will want > to release early and often at this stage. AFAIK, the crate releases don't have to be strictly tied to Git releases. In theory we could choose to publish updates to the crate whenever "master" or any other branch is updated; whether or not that is a good idea is a separate discussion. > [1]: Other Rust projects carry vendored copies of projects upon which > they rely. For instance, the "native_tls" crate has a vendored copy of > OpenSSL[2]. > > [2]: https://docs.rs/native-tls/latest/native_tls/#cargo-features > > [3]: https://lore.kernel.org/git/CABPp-BFWsWCGogqQ=haMsS4OhOdSwc3frcAxa6soQR5ORTceOA@mail.gmail.com/
Josh Steadmon <steadmon@google.com> writes: > I was avoiding addressing this topic in the hopes that folks might > suggest additional name options,... I've seen libgit-rs (or was it libgit-rust?) suggested already and found them reasonable. If libgit2 folks do not use libgit_ prefix, I do not see any reason for us to avoid it, either. Thanks.
Josh Steadmon <steadmon@google.com> writes: >> But just a dismissing "Bikeshed on the name", as if they do not care >> to be mistaken as saying "those who complain about the name are only >> bikeshedding and not worth listening to"? >> >> We should do better than that. > > I am quite surprised that people felt this was dismissive. So to be > clear: yes, we need a new name before this lands in next. I thought that > leaving that as a known needs-work item was sufficient to call that out, > but I guess I was wrong. Yes, I had a similar initial reaction, but I guess that comes primarily from the fact that we both misjudged how "cgit" is already deeply established name that refers to something other than this project.
On 2024-08-12 at 09:03:57, Eric Sunshine wrote: > On Mon, Aug 12, 2024 at 4:15 AM Junio C Hamano <gitster@pobox.com> wrote: > > The original iteration had this: > > > > * bikeshedding on the name (yes, really). There is an active, unrelated > > CGit project [4] that we only recently became aware of. We originally > > took the name "cgit" because at $DAYJOB we sometimes refer to git.git > > as "cgit" to distinguish it from jgit [5]. > > A tangent: Speaking of external/other projects, I don't think we've > seen an explanation yet as to why this Rust wrapper is proposed as a > `contrib/` item of Git itself, as opposed to being a separate project. > > I can only think of two possible reasons why they might want it in the > Git project itself... > > (1) Easier access to the library portions of Git ("libgit") since that > portion of the code is not otherwise published as a standalone > library. However, a workable alternative would be for the Rust wrapper > to carry its own "vendored"[1] copy of Git. This would also ensure > more reliable builds since they wouldn't have to worry about the > "libgit" API changing from under them, and can adjust for "libgit" API > changes when they manually pull in a new vendored copy. Hence, I'm not > convinced that this is a valid reason to carry the Rust wrapper in > Git. Please don't vendor packages like this. This means that every time there's a security vulnerability in Git, even if we ship a public libgit and even if the security impact doesn't affect libgit, every security scanning tool will demand that the crate be updated immediately. This wastes colossal amounts of work and it's hostile to distros as well, who will have to repackage the source to remove the vendoring. At work, I maintain a codebase using Nokogiri, which is a Ruby gem that vendors libxml2 (which has an absolutely abysmal security record), and I cannot tell you how much useless work I perform updating this gem because of security scanners screaming about the vendored libxml2, even though it's completely possible to use the system library. > (2) Perhaps the intention is that this Rust wrapper work will allow > Rust to be used within Git itself[3]? If that's the case, then > `contrib/` seems the wrong resting place for this code. I think contrib is the right place for now. We may in the future want to include some Rust code in the codebase in some context, and this is a good way for us to experiment with it on an interim basis and discover whether that's a viable approach for us. Perhaps it is, and perhaps it is not, but we'll have built the experience to know for certain. I could imagine (and this is hypothetical and speculative) that we might allow some sorts of performance optimizations and optional features in Rust, but require core functionality be in C until Rust is better supported on some platforms. That might be a nice way to improve things like multithreading, which Rust excels at, for example. As an example, I'd like to write a random-access tree parser[0] in Rust (such as for "dev:README.md"), since our current approach performs terribly on large trees (it's linear instead of logarithmic). However, I'm not willing to write that code in C because it's a giant landmine of memory unsafety and I think it's too likely to be buggy in C. [0] I am aware that due to the structure of trees, this is not _always_ possible to do, but it is possible in _many_ cases, and optimistically trying and falling back to the old approach may still be faster.
On Mon, Aug 12, 2024 at 02:32:12PM -0700, Josh Steadmon wrote: > On 2024.08.12 05:03, Eric Sunshine wrote: > > On Mon, Aug 12, 2024 at 4:15 AM Junio C Hamano <gitster@pobox.com> wrote: > > > The original iteration had this: > > > > > > * bikeshedding on the name (yes, really). There is an active, unrelated > > > CGit project [4] that we only recently became aware of. We originally > > > took the name "cgit" because at $DAYJOB we sometimes refer to git.git > > > as "cgit" to distinguish it from jgit [5]. > > > > A tangent: Speaking of external/other projects, I don't think we've > > seen an explanation yet as to why this Rust wrapper is proposed as a > > `contrib/` item of Git itself, as opposed to being a separate project. > > > > I can only think of two possible reasons why they might want it in the > > Git project itself... > > > > (1) Easier access to the library portions of Git ("libgit") since that > > portion of the code is not otherwise published as a standalone > > library. However, a workable alternative would be for the Rust wrapper > > to carry its own "vendored"[1] copy of Git. This would also ensure > > more reliable builds since they wouldn't have to worry about the > > "libgit" API changing from under them, and can adjust for "libgit" API > > changes when they manually pull in a new vendored copy. Hence, I'm not > > convinced that this is a valid reason to carry the Rust wrapper in > > Git. > > > > (2) Perhaps the intention is that this Rust wrapper work will allow > > Rust to be used within Git itself[3]? If that's the case, then > > `contrib/` seems the wrong resting place for this code. > > Neither, actually. We hope that by keeping the crate definition in the > main Git repo and by allowing developers to optionally run them by > default as part of CI and `make test`, we can catch breaking bugs as > early as possible. We're also hoping that we'll get more attention from > interested developers by staying in the main repo rather than in a > separate project. That to me raises an important question: who is the one fixing breakage? Hypothetically speaking, if I continue with my refactoring spree to drop `the_repository`, do I also have to fix the Rust bindings that I break as a consequence? Patrick
On 2024-08-16 at 11:39:24, Patrick Steinhardt wrote: > That to me raises an important question: who is the one fixing breakage? > Hypothetically speaking, if I continue with my refactoring spree to drop > `the_repository`, do I also have to fix the Rust bindings that I break > as a consequence? If we're testing it in CI, then you are responsible for not breaking it, even if you don't use it, just as I am responsible for not breaking Windows, even though I don't use that platform. That's typically been the policy here and elsewhere. That being said, there are two things I'd like to point out. First, your work to drop the implicit `the_repository` is very useful, because Rust code implicitly requires thread safety as part of the language, and you will be making the dependency on the object explicit so Rust can guard against concurrent access. I expect that you will end up breaking very few endpoints with those series because we can't really expose endpoints with implicit global thread-unsafe state (such as `the_repository`) in Rust anyway except as `unsafe`. Second, I and others will probably be happy to help if you have questions or need assistance fixing bindings. I've done a decent amount of work in Rust, including mostly porting a service at $DAYJOB from C to Rust (the one that serves Git requests, no less), so I'm familiar with a lot of those kinds of problems, as I'm sure others are on the list as well.
On Fri, Aug 16, 2024 at 5:38 PM brian m. carlson <sandals@crustytoothpaste.net> wrote: > On 2024-08-16 at 11:39:24, Patrick Steinhardt wrote: > > That to me raises an important question: who is the one fixing breakage? > > Hypothetically speaking, if I continue with my refactoring spree to drop > > `the_repository`, do I also have to fix the Rust bindings that I break > > as a consequence? I share Patrick's concern, and it's one of the reasons I posed the question in the first place about why these Rust bindings are being proposed for Git's "contrib/" rather than as a standalone project. > If we're testing it in CI, then you are responsible for not breaking it, > even if you don't use it, just as I am responsible for not breaking > Windows, even though I don't use that platform. That's typically been > the policy here and elsewhere. This is an apples-and-oranges comparison, isn't it? Although the majority of Git developers may be Unix folk, Git itself has a reasonably large Windows user population, so breaking it on Windows carries some potentially real consequences (i.e. hurting the immediate user community). On the other hand, the Rust bindings under discussion are (1) as yet effectively hypothetical, (2) will almost certainly be relied upon by a tiny number of other projects, and (3) impact only developers, not users, of Git-related tooling. As such, it seems far too early to be placing the onus on *all* Git developers to have to worry about the Rust bindings. If, at some point in the future, the Rust bindings gain significance or become indispensable to the Git project itself, then the onus might well be warranted, but at this early stage, it seems unreasonable. A more friendly approach to the overall Git developer community would be for those interested in the Rust bindings to maintain them. (The case with the CMake project files is similar. In the end, the people interested in utilizing them took on the responsibility of maintaining them.)
Eric Sunshine <sunshine@sunshineco.com> writes: > (The case with the CMake project files is similar. In the end, the > people interested in utilizing them took on the responsibility of > maintaining them.) That is a good analogy. We would all be slowed down if you have to adjust CMake stuff (or autoconf stuff for that matter) when the build procedure changes you made only to Makefile (because you only have a ready access and expertise on the "make" proper), but in practice, niche things that nobody cares about (and remember, if no stakeholder is there to volunteer, you cannot force others to care about your niche) will bitrot enough to cause somebody to care and get fixed. Another possibility is that it proves that nobody cares, and we just drop that part. Either outcome is fine in the end. I think the Rust thing will proceed the same way. At least, I am sensing that this time there are already motivated to lend help from outside the group of folks that are proposing this change.