[TOPIC 05/11]: SHA 256 / Git 3.0
- From
Taylor Blau <me@ttaylorr.com>
- Date
- Sep 20, 2024, 14:19 UTC
- Message-ID
- <Zu2EdQs6xf2FRkpa@nand.local>
- In-Reply-To
- <Zu2DmS30E0kKug2a@nand.local>
SHA-256 / Git 3.0 =================
(moderator: Patrick, notetaker: Taylor)
* Patrick: some of you may have seen some patches from a few months ago
to start thinking about this, and we now have a "deprecations" doc of
things that we plan to get rid of.
* One thing going away is grafts
* Another thing is git pack-redundant
* Patrick: SHA-256 will become the default object hash, but is
contingent on major platforms supporting SHA-256.
* Emily: this helps us too, because it provides some motivation that
this is going to happen.
* Patrick: having it in the 3.0 document makes it easier to push at
large organizations.
* Jonathan: with partial clones if I understand correctly users were
already trying it and complained to GitHub about it not being turned
on.
* Taylor: not really…
* Peff: I was embarrassed, so I wrote the bitmap support for
filtering objects
* Taylor: yeah, and turning it on was easier, but didn't require
updating database columns, etc. so the transition period here would
be much more expensive.
* brian: "can you put it in the customer feedback repo" is something
customers can ask for
* Jonathan: could use interop as a way for Git to default to sha256 with
the only harm to end users being that clones and fetches get slower
until servers support it
* brian: not planning on working on it unless their employer pays for
them to do it.
* Mark: customers wanting to start with SHA256 so they don't have to
migrate later
* Patrick: GitLab never really wanted SHA-256 until it was done on the
Gitaly side.
* brian: has definitely seen it on StackOverflow as something that
customers want. Not a huge selling point right now, but will become a
humongous selling point at some point (beyond >2030).
* Peff: if the proposal is to make SHA-256 the default, then we need to
be developing with it now, and we're not because there is no interop.
* Taylor: we should do it via interop, (a) because GitHub could not host
it, but (b) because we would introduce the same lack of testing just
with the interop code, not the SHA-256 code. So it must be done via
interop.
* Patrick: OK, but why do we care about SHA-256 locally if they're using
SHA-1 on the remote? The remote could be compromised
* Jonathan: You can verify things locally. This is the core idea of
distributed version control.
* Patrick: Oh, I see.
* brian: Signatures work with both hash functions, you can sign with
both.
* Peff: It does not feel right to me to set the user default until we
the project are using it, and that the interop code is a part of that
story. (back to Git 3.0, we combined the SHA-256 and Git 3.0
discussions into one)
* Peff: I have a proposal for Git 3.0, maybe this has been discussed?
Can we get rid of some of the older protocols (dumb HTTP)?
* Patrick: Lots of esoteric things, like show-branch, which apparently
nobody uses.
* Elijah: not just removals, but changing defaults, etc.
* Emily: are we interested in non-backwards compatible changes, like
adding multi-Author fields to commits?
* Peff: I think that's a bad example, it can be done without breaking
compatibility, but it was decided to not to do it. You're welcome to
resurrect the discussion.
* Patrick: … but it's a different question of whether or not that would
end up in the document.
* brian: multi-signatures
* Jonathan: Two questions I'm hearing:
* Should we include things that haven't been implemented yet?
Probably not.
* What do we think about this major version as a way to break
interoperability with older versions of Git?
* Patrick: I would not be in favor of breaking something, at least in
cases where we can add a protocol extension and/or new capabilities.
Intentionally breaking interoperability with an older version does not
seem like the right way to go.
* brian: I agree, but for the dumb HTTP protocol, C git uses it, Eric
Wong is really into it (lore.kernel.org supports it), etc.
* Emily: Bundle URIs and resumable clones, could in theoretically work
for resumable clones, but we don't have client-side support.
* Peff: Pretty sure that this isn't the case.
* Mark: can I ask a "dumb" question? What would it take to get a
schedule for 3.0?
* Patrick: Junio says not too often, maybe only breaking releases
every 5-10 years, which means 3.0 would come in 1-2 years.
* Peff: 1-2 years is what is in my mind.
* Taylor: I think that whatever answer we come to agreement here will
not be satisfying for you.
* Taylor: the items on that document aren't a checkbox list of things
to do before Git 3.0, but isn't a "let's get all of these things
done and then we'll release Git 3.0".
* More that we'll all wake up one day, realize that we've done all
or enough of what would go into Git 3.0, then remove a bunch of
code, and ship it.
* Jonathan: collecting breaking changes and aggregating them so users
can prepare for them together is helpful, but it's not the only way
that breaking changes will happen, especially if there is something
that needs to go away.
* Patrick: I want three things from this document:
* Reminder / documented intent.
* User feedback to hear things like "this is important to me, what is
(if any) the replacement?"
* ???
* brian: changing the default branch name?
* Taylor: I would be in favor of doing it sooner
* (some discussion)
* Taylor: We should consider doing it for git.git as well.
* Peff: we might write a bunch of those patches, move them into 'next'.
Could we have a Git 3.0 pseudo-maintainer.
* Jonathan: I have a naive question: why wouldn't it look like turning
on a single Makefile variable?
* Emily: and then we go and delete the code inside of the #ifdefs
* Taylor: whoever is the maintainer at that point in time could consider
a double-wide release cycle, where we delete that code, implement new
things, and then at the end of that cycle the artifact is called Git
3.0.
* Peff: very few people run "next"
* Jonathan: True. Could imagine some % of GitHub Actions runners
automatically running "next", that's the kind of thing that gets a
more representative workload.
* Toon: do we want to have maintenance releases?
* Emily: if we're dropping support for earlier versions, we should just
do it.
* Taylor: we should probably have a few supported release tracks that we
designate as LTS releases.
* Patrick: For security issues only, probably for a period of 1-2 years.
* Peff: Should we write this up as a plan for the person who actually
does release engineering?
* Taylor: I can write up that plan, and be the point person for the
LTS releases.
* Jonathan: the Linux kernel has dedicated maintainers for LTS
releases, which seems to work well.
* brian: we can certainly tell that to Junio, but it's also ultimately
their decision.