Olhando com expectativa para o Git 2.56 — e 3.0
Os planos para o Git 2.56 e um eventual 3.0 estão provocando debate sobre como migrar de SHA-1 para SHA-256 sem quebrar histórico, ferramentas ou assinaturas, e como verificar a integridade durante essa transição. Os comentaristas também avaliam os benefícios e as desvantagens de introduzir Rust para internos mais seguros, adotar novos mecanismos de armazenamento como reftable e backends pluggáveis em vez de refs baseadas no sistema de arquivos, e melhorar problemas antigos de usabilidade, como estilos de conflito, padrões e suporte a change IDs. Questões mais amplas de segurança também surgem, incluindo como escolhas de *hash* interagem com ameaças quânticas e se mudanças incrementais realmente melhoram a segurança em uma grande base de código em C.
Migração para SHA-256 e reescrita do histórico
- Vários comentários debatem se a mudança de SHA-1 para SHA-256 exige force-pushes e reescritas do histórico.
- Preocupações: risco de adulteração do histórico durante force-pushes; invalidação de referências baseadas em SHA em issues, comentários e código; quebra de shallow clones; invalidação de assinaturas de commits existentes.
- Alguns observam que os blobs de conteúdo não mudam, então é possível recalcular hashes e comparar históricos SHA-1 e SHA-256, mas isso não impede corrupção do histórico.
- Outros destacam que o Git não misturará livremente repositórios SHA-1 e SHA-256 (por exemplo, submodules), o que implica configurações de dois repositórios de longa duração e tabelas de mapeamento.
- A documentação sugere que a mudança é mais parecida com um repack com camadas de compatibilidade e tabelas de busca, e não apenas uma troca brusca.
Adoção de Rust no Git
- Um lado argumenta que Rust está sendo “imposto” desnecessariamente e que uma pequena parte em Rust não melhora significativamente a segurança.
- Outros respondem que:
- Melhorias incrementais importam, especialmente para novo código e parsers, onde C tem um longo histórico de CVEs de segurança de memória.
- Usar linguagens mais seguras para novos componentes é racional, mesmo que o C legado permaneça.
- Há discussão sobre abordagens alternativas de “C seguro” (por exemplo, Fil-C), observando trade-offs de desempenho e memória.
Backends de armazenamento, refs e reftable
- Alguns querem que o Git “abandone arquivos lentos” por um “banco de dados de verdade”.
- Contraponto: o sistema de arquivos já é um banco de dados não relacional; os problemas de desempenho vêm de casos de uso mais recentes (muitas refs, fluxos de trabalho no estilo hub).
- Há trabalho em andamento em backends pluggáveis (reftable para refs; armazenamentos alternativos de objetos como SQLite, S3 etc.).
- O reftable é elogiado por resolver problemas de nomes de refs/caminhos e de sensibilidade a maiúsculas/minúsculas, mas a compatibilidade com ferramentas (por exemplo, libgit2, integrações de shell) é uma preocupação.
Padrões, UX e recursos de fluxo de trabalho
- Pedidos para que o Git 3.0 corrija “padrões ruins”, incluindo:
- Padrões de push mais seguros (
--force-with-lease, configuração automática de remoto). - Melhor estilo de conflitos (
zdiff3), diffs de submodules e recursão aprimorados, ererereativado.
- Padrões de push mais seguros (
- Alguns defendem “change IDs” padronizados para commits (como usados por Gerrit, jj, GitButler) para dar suporte a revisão por commit, mudanças empilhadas e IDs estáveis através de rebases; comandos atuais do Git frequentemente descartam esses cabeçalhos.
- Várias visões sobre “snapshotting” simples: usar
git stash, branches/tags dedicados de WIP, ou ferramentas externas de snapshot.
Segurança e preocupações quânticas
- A discussão esclarece que:
- Ataques de extensão de comprimento não são relevantes para o uso de hashes pelo Git.
- Ameaças quânticas afetam principalmente criptografia assimétrica; cifras simétricas e hashes sofrem, no máximo, uma redução de segurança de raiz quadrada.
- SHA-256 é considerado suficiente; mudar agora para SHA-3 é visto como impraticável, dado o trabalho de transição de longa duração já realizado.
Diversos
- Notas sobre GitHub e Bitbucket estarem atrasados no suporte a SHA-256, embora o GitHub supostamente tenha private previews.
- Interesse em ver o reftable se tornar padrão, além de debates paralelos sobre IDs inteiros de commit (como no Mercurial) e comportamentos de queda do sistema de arquivos afetando refs.