GitHub: não é mais possível pesquisar código sem fazer login
(github.com/orgs)- Em uma discussão da GitHub Community, foi levantado como problema o fato de que até a pesquisa de código em repositórios públicos não pode mais ser usada sem login, e o autor da pergunta criticou isso por prejudicar a acessibilidade do código público e a utilidade do open source
- Um mantenedor do GitHub respondeu que a busca em todos os repositórios já exigia login há muito tempo e que, no início de 2023, ao reforçar o recurso de busca, a exigência de login foi estendida também à busca em repositórios individuais
- Segundo o GitHub, o motivo é suportar a carga da busca para desenvolvedores e reduzir situações em que o servidor é sobrecarregado por requisições anônimas de bots e semelhantes
- Participantes da discussão questionaram se exigir login é suficiente para impedir bots, já que repositórios públicos ainda podem ser clonados e pesquisados localmente, e citaram alternativas como rate limit, CAPTCHA e limitação de buscas simples
- Na prática, usuários sem login não conseguem mais abrir diretamente links de busca em código público, e por isso também foram discutidas formas de contorno como grep.app, github1s,
greplocal, mecanismos de busca comuns e espelhamento em vários Git forges
Exigência de login passa a valer para a busca em código público
- A GitHub Community Discussion #77046, com o título “Can no longer search code without being logged in”, trata da situação em que não é mais possível pesquisar código sem estar logado
- O autor da pergunta explicou que tentou procurar algo em seu próprio repositório usando um dispositivo antigo, mas não conseguiu prosseguir por causa da exigência de login
- Ele disse que precisaria acessar o gerenciador de senhas, passar por 2FA e usar uma YubiKey, mas foi bloqueado porque o notebook antigo não tinha porta USB-C
- Também afirmou que queria permitir que outras pessoas usassem a busca no código do repositório público
- O autor criticou a exigência de login para a busca de código via web, dizendo que, se o repositório é público, qualquer pessoa pode cloná-lo e usar ferramentas próprias para pesquisar e analisar o código
- A discussão foi marcada como Answered com uma resposta do GitHub, e a página mostra 19 comentários e 58 respostas
Resposta do GitHub e justificativa oficial
- O mantenedor do GitHub martinwoodward pediu desculpas pelo incômodo e respondeu que a busca em todos os repositórios já exigia login havia bastante tempo
- Ele explicou que, no início de 2023, ao reforçar o recurso de busca, a exigência de login foi estendida também à busca em repositórios individuais
- Como referência para a mudança, foi indicado o link Code search now requires login
- Ele afirmou que o objetivo principal é suportar a carga da busca para os desenvolvedores do GitHub e evitar que os servidores sejam sobrecarregados por requisições anônimas de bots e similares
- Durante a discussão, outro participante também compartilhou o link The technology behind GitHub’s new code search, sobre a nova implementação da busca de código do GitHub
O centro da reação: repositórios públicos e acessibilidade do open source
- Vários participantes disseram que, como o código de repositórios públicos pode ser clonado sem login, bloquear com login até a busca em código público é uma medida excessiva
- Um participante explicou que é inconveniente obrigar usuários externos a fazer login no GitHub apenas para visualizar seu código-fonte público
- Como exemplo, disse que queria compartilhar consultas como
repo:USER/REPO,path:...,AND NOT path:**/_externalsem uma única URL ou botão - Por causa da exigência de login, ele disse que teria de substituir isso por uma lista de URLs diretas para arquivos
- Como exemplo, disse que queria compartilhar consultas como
- Outros participantes apontaram a tensão entre a imagem do GitHub como “world's largest open source community” e a limitação da busca em código público
- Alguns comentários lembraram que restrições parecidas já existiam antes da aquisição pela Microsoft, contestando a ideia de que isso seria algo totalmente novo
Debate sobre bots e custos
- O GitHub alegou que a carga causada por bots anônimos é uma razão importante, mas alguns participantes argumentaram que exigir login dificilmente impede operadores de bots dedicados
- Como alternativa, foi sugerido aplicar primeiro um rate limit e só pedir CAPTCHA ou login quando o limite fosse atingido
- Também apareceu o argumento de que, como repositórios públicos podem ser clonados anonimamente, bots podem simplesmente migrar para busca local
- Em resposta, outro participante rebateu que o clone não usa o processamento de busca do GitHub, então isso reduz o vetor de negação de serviço
- Também houve a observação de que dados clonados podem ficar stale rapidamente
- Se o custo da busca for alto, também foi sugerido separar a oferta: consultas simples para usuários sem login e consultas complexas para usuários autenticados
Limitações da própria busca e casos de comparação
- Um participante comentou que, mesmo logado, ao pesquisar
path:contributing.mdem todos os repositórios públicos, apenas 5 páginas de resultados aparecem- Outro participante respondeu que isso não é um problema daquela consulta específica, mas uma limitação atual da busca, citando como discussão relacionada a GitHub Community Discussion #9868
- Outro participante comparou o funcionamento da busca em SourceForge, Google Code archive, GitLab e Bitbucket
- Disse que SourceForge e Google Code archive não têm busca
- Disse que o GitLab exige login para busca global, mas permite busca por repositório
- Disse que a busca do Bitbucket redireciona para login, mas que, ao encontrar o repositório, é possível pesquisar sem login
Formas de contorno e serviços alternativos
- Como forma rápida de pesquisar um único repositório sem estar logado, foi apresentado um procedimento de clone local seguido de
grep- Ir para
/dev/shm git clone https://github.com/user/repo- Entrar no repositório e executar
grep -r "pattern" . - Apagar o repositório após a busca
- Ir para
- Para pesquisa de padrões em todo o GitHub, foi citada a possibilidade de usar um mecanismo de busca comum com
"pattern" site:github.com- Mas também foi observada a limitação de que isso não é tão poderoso quanto a busca interna do GitHub e que parte do código pode não estar indexada
- Como ferramenta alternativa ou complementar, foi mencionado o grep.app, apresentado como capaz de pesquisar repositórios sem login
- Também foi compartilhada a dica de trocar
github.comporgithub1s.comna URL do GitHub para abrir o repositório em uma interface parecida com o VS Code online- Como exemplo, foram comparados
https://github.com/libretro/px68k-libretro/ehttps://github1s.com/libretro/px68k-libretro/
- Como exemplo, foram comparados
- GitLab, Framagit, Gitea, Forgejo, Codeberg e Gogs também foram citados como Git forges alternativos, e alguns deles permitem ativar busca de código em hospedagem própria
Conselho sobre a forma de hospedar projetos
- Um participante recomendou tratar o GitHub não como o único code forge do projeto, mas como um dos espelhos
- Ele explicou que o Git é um sistema distribuído de controle de versão, então depender apenas do GitHub cria um ponto único de falha
- Como exemplo, foi mostrada a forma de adicionar vários remotes e fazer push separadamente para GitHub, Codeberg, Framagit e um repositório privado
git remote add github https://github.com/user/repo.gitgit remote add codeberg https://codeberg.org/user/repo.gitgit remote add framagit https://framagit.org/user/repo.gitgit remote add private https://example.com/user/repo.git
1 comentários
Opiniões do Hacker News
Olhando para essa questão da forma mais benevolente possível, a nova busca de código do GitHub é, na prática, excelente, e pode ser um recurso que consome muitos recursos por fazer internamente muito mais trabalho do que um mecanismo de busca comum
Ao limitar a contas logadas, dá para economizar bastante recursos de servidor que seriam usados para lidar com crawlers. A escolha aqui parece ser algo próximo de gastar 3 a 4 vezes mais, ou até mais, em infraestrutura de busca, ou levar críticas por exigir login. Eu mesmo criei uma ferramenta de busca de código para repositórios do GitHub, mas a busca de código padrão do GitHub é tão útil que quase não a uso mais: https://simonwillison.net/2020/Nov/28/datasette-ripgrep/
Por outro lado, usuários existentes podem ficar irritados por não conseguirem nem pesquisar sem fazer login. Em situações como usar o PC de outra pessoa, um computador público, uma aba anônima ou o tempo gasto com autenticação de dois fatores, isso é bem inconveniente. O GitHub poderia ter mantido uma busca básica barata e rápida para usuários não logados, mas não fez isso
No fim, tornou-se impossível participar de “open source hospedado no GitHub” sem se cadastrar no GitHub
grep é uma ferramenta de 50 anos, não é preciso escrever código do zero para busca de texto, basta usar software livre. Não estamos falando de uma startup amadora com um app CRUD e três desenvolvedores; é patético que uma das maiores e mais ricas empresas de tecnologia do mundo não consiga nem fazer busca de texto direito sem login. Se houver uma terceira explicação, eu gostaria de ouvi-la
A explicação do GitHub soa, em grande parte, como conversa fiada. Colocar autenticação obrigatória em um endpoint público não é uma solução adequada para o problema que eles dizem ter. Qualquer criador de bot interessado nesse endpoint só precisa fazer login com uma conta gratuita, então isso também não reduz de forma significativa a carga nos servidores
Isso começou há pelo menos 6 meses e também foi anunciado no changelog: https://github.blog/changelog/2023-06-07-code-search-now-req...
Discussão no HN: https://news.ycombinator.com/item?id=36230929
Do ponto de vista de negócios, entendo completamente por que fizeram isso. Porque transforma as pessoas literalmente em usuários e aumenta o engajamento dos usuários
Agora precisamos parar de tratar o GitHub como uma plataforma aberta
O GitHub é um jardim murado fechado, como qualquer outro serviço. O fato de hospedar muitos projetos open source que usamos não o torna melhor; talvez até o torne pior, porque ajudamos a empurrar parte da infraestrutura de contribuição desses projetos para trás da fechadura de uma conta corporativa
Na verdade, entre essas opções, acho que uma conta do GitHub é melhor. Porque permite participar de uma quantidade quase infinita de projetos sem precisar criar novas contas o tempo todo nem ficar sem login. É difícil dizer que o GitHub bloqueou algo de forma substancialmente diferente das outras opções desse espaço. O GitHub criou um bom software e o ofereceu de graça, manteve-o bastante aberto e acessível, seguiu padrões onde havia padrões, forneceu APIs para o restante e ofereceu gratuitamente uma enorme quantidade de armazenamento e computação para projetos open source
Há hospedagem Git, hospedagem de wiki, issues, GitHub Actions, GitHub Pages e uma API decente. Existem muitos motivos para colocar um projeto open source no GitHub
Em 2023, a web realmente se fechou. StackOverflow, Reddit, GitHub e Twitter todos frearam scraping e acesso via API
O gatilho foi uma combinação de prevenção contra treinamento de IA e pressão por rentabilidade. Também houve realidades comerciais como a desaceleração do setor de tecnologia, os novos donos do Stack e do X, e o avanço do Reddit rumo ao IPO. No longo prazo, vejo o mercado de dados proprietários crescendo. Mecanismos de busca, ferramentas de IA e qualquer pessoa que precise de dados terão de pagar pelo fluxo de dados de origem ou pelo acesso à API; se só as empresas mais ricas puderem comprar esses dados, isso também pode levar a questões antitruste
Se algo é realmente dado proprietário, a compensação deve ir para o dono, não para um operador aleatório de servidor Git. Preço e condições também devem ser definidos pelo dono, não pelo operador do servidor. Se o servidor precisa ganhar dinheiro, que cobre pelo serviço básico em si. Por outro lado, se alguém criou algo para compartilhar, e a plataforma da época oferecia um canal eficaz para essa distribuição e também se promovia como adequada para isso, mudar as regras no meio do caminho é moralmente uma pirataria do trabalho dessa pessoa. É bem provável que boa parte do material dessas plataformas nunca tivesse sido publicado ali se os donos reais tivessem previsto restrições arbitrárias e taxas de acesso. Se as regras forem reescritas de forma radical, o conteúdo existente só deveria ser vendido quando o autor original concordar explicitamente. Mas o Reddit chegou a restaurar ativamente posts que autores haviam apagado em massa para impedir esse tipo de abuso
https://theoatmeal.com/comics/reaching_people
Só que com limites de taxa muito mais rígidos. Criar uma conta no GitHub é gratuito e nem chega a ser tão invasivo. Mesmo logado, todas as APIs já têm limites de taxa para impedir que você derrube os servidores. Por isso ferramentas como https://gitstar-ranking.com/ têm dificuldade ao tentar coletar as estrelas do GitHub de todos os repositórios usando uma conta gratuita. O dado realmente importante, o código-fonte, pode ser clonado anonimamente por um endpoint HTTPS, e a busca no código pode ser feita localmente. Sites de terceiros como https://grep.app/ também são possíveis dessa forma. No caso de Reddit/Twitter, os dados de origem — posts, comentários, votos/recomendações e tweets — deixaram de ser oferecidos pela API, o que tornou difícil ou impossível criar ferramentas de terceiros. Já no GitHub, a situação é bem diferente: os dados de origem são facilmente acessíveis, e apenas a camada auxiliar de busca foi bloqueada para usuários não logados
Lembro que, quando o StackOverflow foi lançado, ele era comparado ao expertsexchange, mas avaliado como “aberto”. Agora é hora de sair dos serviços centralizados e ir para uma estrutura mais distribuída e baseada em microtransações. Muita gente no HN vai odiar, mas fóruns de perguntas e respostas, agregação de links de notícias e comentários, hospedagem Git, fluxos de aprovação, wikis e sistemas de tickets podem e devem ser implementados de forma totalmente distribuída. Tecnologias como Kademlia/BitTorrent, IPFS e CryptoTokens para pagamentos por microtransações são caminhos possíveis. Ir para 100% distribuído é a única maneira de manter essas coisas “abertas” e livres da ganância corporativa. Mesmo quando fundadores começam com boas intenções, no longo prazo o produto acaba sendo vendido e os contadores passam a mandar; isso se repetiu várias vezes
Fazendo uma leitura de boa-fé, busca exige bastante computação e, por isso, pode ser um grande vetor de ataque de negação de serviço
Não sei quantos dados comportamentais o GitHub consegue coletar de usuários logados, nem quão úteis eles são em comparação com código que já é público. Talvez dê para usar isso para entender quais partes do código são importantes, mas é difícil chamar isso de informação específica por usuário
Cerca de 0,5% do tráfego do meu mecanismo de busca é de humanos. Não conheço muitos mecanismos de busca que não tenham estatísticas parecidas
Desde o dia da aquisição pela MS, não vejo nenhum motivo legítimo para qualquer projeto open source permanecer naquela plataforma. E não é como se faltassem boas alternativas para as quais dá para migrar com um único
git cloneEntão há várias explicações plausíveis para bloquear a API
Quando não estou logado, uso o Sourcegraph. Comparado à busca existente, ele ainda tem a vantagem de ser muito melhor
É simples a ponto de bastar colar a URL do repositório começando por github.com. Por exemplo, em sourcegraph.com/github.com/rust-lang/rust/ dá para pesquisar
unitnesse repositórioParte do fosso de IA da Microsoft está em controlar a capacidade dos concorrentes de usar as informações do GitHub
Eu não ficaria surpreso se, em seguida, começassem até a restringir
git clonegit clonequebraria sistemas de CI demaisSeria preciso dizer adeus a uma grande parte do NPM, ao gerenciamento de pacotes do Go, a scripts Jenkins etc.
Pelo que lembro, o GitHub já aplica limites de taxa para desacelerar clones ou uso excessivo da API
Mesmo concordando com a posição de quem fez a pergunta, não sei se havia necessidade de falar daquele jeito
Também não concordo totalmente com essa posição, já que busca não é necessariamente barata e pode ser usada em ataques do tipo DoS. Não vejo em que ajuda dizer coisas como “não basta monetizar até cada evacuação, agora querem rastrear quais linhas de código eu vejo?”. É preciso se acalmar. O argumento de base também não é tão bom. Os repositórios em si não são bloqueados por login; repositórios públicos continuam acessíveis publicamente, inclusive via clone. Se o autor quer que seu repositório e seu código sejam úteis ao público, no momento em que alguém passa de simples download e busca para abrir uma issue ou enviar um PR, o colaborador de qualquer forma precisa fazer login
Isso é necessário para entender como algo funciona ou ao discutir em lugares que não são issues do GitHub. Fazer clone costuma ser rápido, mas não em repositórios muito grandes, e pode ser que não haja espaço no dispositivo atual para clonar. Além disso, se muita gente passar a clonar sempre em vez de fazer login, especialmente porque o login do GitHub é incômodo por causa da autenticação em duas etapas, fica a dúvida se a carga no sistema sequer diminuiria. Nem todo mundo quer ter uma conta no GitHub
Hacker News: ficou impossível ver a primeira página sem encontrar reclamações de que um serviço gratuito e sem anúncios não é oferecido a usuários não logados
Neste caso, seu código está sendo usado para treinar o Copilot e coisas do tipo. Mesmo que não fosse assim e o serviço fosse realmente tão bem-intencionado quanto você acredita, dá para aplaudir ao ver o serviço piorando para bastante gente? Isso é interessante e empolgante?
O único exemplo que me vem à mente é a mudança na API do Reddit, mas isso já faz bastante tempo e só tem uma relação frouxa com login
Se quiser continuar pesquisando em open source, https://sourcegraph.com/search não exige login e também inclui grandes projetos que não estão no GitHub
Para referência, sou CTO da Sourcegraph
Antes eu esperava que a busca do GitHub pudesse competir com
git clone + grep, mas não imaginava que o preço seria uma barreira de login. Pelo que me lembro, eu esperava que a barreira de login existisse só por ser um recurso beta e que fosse removida quando virasse a busca padrão