GitHub : impossible de rechercher du code sans se connecter
(github.com/orgs)- Dans une discussion GitHub Community, le fait que même la recherche de code dans les dépôts publics ne soit plus utilisable sans connexion a été pointé comme un problème, et l’auteur de la question critique une atteinte à l’accessibilité du code public et à l’utilité de l’open source
- Un mainteneur de GitHub a répondu que la recherche sur l’ensemble des dépôts nécessitait déjà une connexion depuis longtemps, et qu’au début de 2023, avec le renforcement des fonctions de recherche, l’exigence de connexion a aussi été étendue à la recherche dans un dépôt individuel
- Selon GitHub, la raison est de supporter la charge de recherche destinée aux développeurs et de réduire les situations où les serveurs sont submergés par des requêtes anonymes provenant notamment de bots
- Les participants à la discussion ont mis en doute le fait que l’obligation de se connecter suffise à bloquer les bots, puisque les dépôts publics peuvent toujours être clonés puis fouillés localement, et ont évoqué des alternatives comme le rate limit, les CAPTCHA ou une simple limitation des recherches
- En pratique, les utilisateurs non connectés ne peuvent plus ouvrir directement des liens de recherche dans du code public, ce qui a conduit à discuter aussi de méthodes de contournement comme grep.app, github1s,
grepen local, les moteurs de recherche généralistes ou le mirroring sur plusieurs Git forge
L’obligation de connexion s’applique à la recherche dans le code public
- La GitHub Community Discussion #77046, intitulée “Can no longer search code without being logged in”, traite de la situation où il est impossible de rechercher du code sans être connecté
- L’auteur de la question explique qu’il voulait chercher quelque chose dans son dépôt depuis un ancien appareil, mais n’a pas pu aller plus loin à cause de l’obligation de se connecter
- Il a dû accéder à son gestionnaire de mots de passe, passer par la 2FA et utiliser une YubiKey, mais son vieux portable n’avait pas de port USB-C, ce qui l’a bloqué
- Il précise qu’il voulait permettre à d’autres de pouvoir utiliser la recherche dans le code de ses dépôts publics
- L’auteur critique le fait qu’un dépôt public puisse toujours être cloné puis analysé avec des outils dédiés, ce qui rend selon lui difficile à justifier l’exigence de connexion pour la recherche de code sur le Web
- La discussion a été marquée comme Answered à la suite de la réponse de GitHub, et la page affiche 19 commentaires et 58 réponses
Réponse de GitHub et justification officielle
- Le mainteneur GitHub martinwoodward s’est excusé pour la gêne occasionnée et a répondu que la recherche sur l’ensemble des dépôts demandait déjà une connexion depuis longtemps
- Il explique qu’au début de 2023, lors du renforcement des fonctions de recherche, l’exigence de connexion a aussi été étendue à la recherche dans des dépôts individuels
- Il renvoie au changement correspondant via Code search now requires login
- L’objectif principal, selon lui, est de soutenir la charge de recherche pour les développeurs GitHub et d’empêcher que les serveurs soient submergés par des requêtes anonymes de bots, entre autres
- Pendant la discussion, un autre participant a partagé le lien vers The technology behind GitHub’s new code search, qui présente la nouvelle implémentation de la recherche de code de GitHub
Le cœur des critiques : dépôts publics et accessibilité de l’open source
- Plusieurs participants estiment que, puisque le code des dépôts publics peut être cloné sans connexion, le fait de bloquer aussi la recherche dans le code public par une connexion est une mesure excessive
- Un participant explique qu’il est gênant d’imposer une connexion GitHub à des personnes externes simplement pour consulter son code source public
- Il donne en exemple des requêtes de recherche comme
repo:USER/REPO,path:...,AND NOT path:**/_externals, qu’il voulait partager via une URL unique ou un bouton - À cause de l’obligation de connexion, il dit devoir les remplacer par plusieurs URL directes vers des fichiers
- Il donne en exemple des requêtes de recherche comme
- D’autres participants soulignent la tension entre la communication de GitHub comme “world's largest open source community” et la restriction de la recherche dans le code public
- Certains commentaires se souviennent qu’une limitation similaire existait déjà avant le rachat par Microsoft et rétorquent donc que cette restriction n’est pas entièrement nouvelle
Débat sur les bots et le coût
- GitHub invoque la charge liée aux requêtes anonymes de bots, mais certains participants affirment que l’obligation de connexion ne suffit pas à décourager les opérateurs de bots dédiés
- Comme alternative, il est proposé d’appliquer d’abord un rate limit, puis d’exiger un CAPTCHA ou une connexion une fois la limite atteinte
- D’autres rétorquent que, puisque les dépôts publics peuvent être clonés anonymement, les bots peuvent simplement basculer vers une recherche locale
- Un autre participant répond que le clone n’utilise pas la puissance de calcul de recherche de GitHub et réduit donc un vecteur de déni de service
- Il est aussi noté que des données clonées peuvent devenir rapidement obsolètes
- Si le coût de la recherche est élevé, certains suggèrent aussi de fournir aux utilisateurs non connectés des requêtes simples via un mécanisme plus léger, et de réserver les requêtes complexes aux utilisateurs connectés
Limites de la fonction de recherche elle-même et comparaisons
- Un participant indique que même en étant connecté, une recherche sur tous les dépôts publics avec
path:contributing.mdne renvoie que 5 pages de résultats- Un autre précise qu’il ne s’agit pas d’un problème propre à cette requête, mais d’une limite actuelle de la recherche, et mentionne à ce propos la GitHub Community Discussion #9868
- Un autre participant compare le fonctionnement de la recherche sur SourceForge, Google Code archive, GitLab et Bitbucket
- Il affirme que SourceForge et Google Code archive n’ont pas de fonction de recherche
- GitLab exigerait une connexion pour la recherche globale, tout en permettant la recherche par dépôt
- La recherche de Bitbucket redirigerait vers une connexion, mais permettrait une recherche sans connexion une fois le dépôt trouvé
Méthodes de contournement et services alternatifs
- Pour rechercher rapidement dans un dépôt unique sans être connecté, une procédure utilisant un clone local puis
grepest proposée- aller dans
/dev/shm git clone https://github.com/user/repo- entrer dans le dépôt puis lancer
grep -r "pattern" . - supprimer le dépôt après la recherche
- aller dans
- Pour rechercher un motif sur l’ensemble de GitHub, il est suggéré d’utiliser un moteur de recherche généraliste avec
"pattern" site:github.com- Il est toutefois précisé que cette méthode n’est pas aussi puissante que la recherche intégrée de GitHub et que certains morceaux de code peuvent ne pas être indexés
- grep.app est cité comme outil alternatif ou complémentaire, capable de rechercher dans des dépôts sans connexion
- Une autre astuce partagée consiste à remplacer
github.compargithub1s.comdans une URL GitHub pour ouvrir le dépôt dans une interface de type VS Code en ligne- Les exemples
https://github.com/libretro/px68k-libretro/ethttps://github1s.com/libretro/px68k-libretro/sont comparés
- Les exemples
- Comme Git forge alternatifs, GitLab, Framagit, Gitea, Forgejo, Codeberg et Gogs sont mentionnés, certains permettant d’activer la recherche dans le code en auto-hébergement
Conseils sur l’hébergement des projets
- Un participant conseille de ne pas traiter GitHub comme l’unique forge de code du projet, mais comme l’un des miroirs
- Il rappelle que Git est un système de gestion de versions distribué et qu’utiliser uniquement GitHub crée un point de défaillance unique
- Il donne l’exemple d’une configuration avec plusieurs remote pour pousser séparément vers GitHub, Codeberg, Framagit et un dépôt privé
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 commentaires
Avis sur Hacker News
En considérant cette affaire sous l’angle le plus charitable, la nouvelle recherche de code GitHub est, à l’usage, vraiment excellente et pourrait être une fonctionnalité très consommatrice de ressources, car elle fait en interne bien plus de choses qu’un moteur de recherche généraliste
La limiter aux comptes connectés peut faire économiser énormément de ressources serveur qui auraient autrement été consacrées aux crawlers. Le compromis semble ici se résumer à dépenser 3 à 4 fois plus, voire davantage, pour l’infrastructure de recherche, ou bien à se faire critiquer pour exiger une connexion. J’ai moi-même créé un outil de recherche de code pour les dépôts GitHub, mais la recherche de code GitHub par défaut est tellement utile que je ne m’en sers presque plus : https://simonwillison.net/2020/Nov/28/datasette-ripgrep/
À l’inverse, les utilisateurs existants peuvent être irrités de ne même plus pouvoir chercher sans être connectés. Sur le PC de quelqu’un d’autre, un ordinateur public, un onglet privé, ou quand l’authentification à deux facteurs prend du temps, c’est assez pénible. GitHub aurait pu laisser aux utilisateurs non connectés une recherche basique, peu coûteuse et rapide, mais ne l’a pas fait
Au final, il devient impossible de participer à « l’open source hébergé sur GitHub » sans s’inscrire à GitHub
grep est un outil vieux de 50 ans, il n’est pas nécessaire d’écrire son propre code pour faire de la recherche textuelle, il suffit d’utiliser du logiciel libre. On ne parle pas d’une startup amateur avec une appli CRUD et trois développeurs, mais de l’une des entreprises technologiques les plus grandes et les plus riches au monde, incapable de fournir correctement une recherche textuelle sans connexion : c’est consternant. S’il existe une troisième explication, je serais curieux de l’entendre
Les explications de GitHub sonnent globalement comme du baratin. Imposer une authentification sur un endpoint public n’est pas une solution adaptée au problème qu’ils prétendent résoudre. Les créateurs de bots intéressés par cet endpoint n’ont qu’à les faire se connecter avec des comptes gratuits, donc cela ne réduit pas significativement la charge serveur
Cela a commencé il y a au moins 6 mois et a été annoncé dans le journal des changements : https://github.blog/changelog/2023-06-07-code-search-now-req...
Discussion HN : https://news.ycombinator.com/item?id=36230929
Du point de vue business, je comprends parfaitement pourquoi ils l’ont fait. Cela transforme littéralement les gens en utilisateurs, tout en augmentant l’engagement des utilisateurs
Il faut arrêter de traiter GitHub comme une plateforme ouverte
GitHub est un jardin clos comme les autres services. Le fait qu’il héberge beaucoup de projets open source que nous utilisons ne le rend pas meilleur ; cela peut même le rendre pire. Car nous avons contribué à placer une partie de l’infrastructure de contribution de ces projets derrière le verrou d’un compte d’entreprise
Parmi ces options, je pense même qu’un compte GitHub est préférable. Il permet de participer à un nombre presque illimité de projets sans devoir sans cesse créer de nouveaux comptes ni se connecter ailleurs. Il est difficile de dire que GitHub bloque quoi que ce soit de substantiellement différent des autres options dans ce domaine. GitHub a créé de bons logiciels et les a fournis gratuitement, les a gardés assez ouverts et accessibles, a suivi les standards lorsqu’il en existait, a fourni des API pour le reste, et a offert gratuitement aux projets open source d’énormes capacités de stockage et de calcul
Il propose l’hébergement Git, l’hébergement de wikis, les issues, GitHub Actions, GitHub Pages, ainsi qu’une API correcte. Il y a beaucoup de très bonnes raisons de mettre un projet open source sur GitHub
En 2023, le Web s’est vraiment refermé. StackOverflow, Reddit, GitHub et Twitter ont tous freiné le scraping et l’accès aux API
Le déclencheur a été la combinaison de la volonté d’empêcher l’entraînement de l’IA et de la pression sur la rentabilité. Il y avait aussi des réalités commerciales comme le ralentissement du secteur tech, les nouveaux propriétaires de Stack et de X, ou encore la préparation de l’IPO de Reddit. À long terme, je pense que le marché des données propriétaires va prendre de l’ampleur. Les moteurs de recherche, les outils d’IA et tous ceux qui ont besoin de données devront payer pour accéder aux flux de données sources ou aux API ; et si seules les entreprises les plus riches peuvent acheter ces données, cela pourrait déboucher sur des problèmes antitrust
Si quelque chose relève vraiment de données propriétaires, la rémunération devrait revenir au propriétaire, pas à un opérateur quelconque de serveur Git. Le prix et les conditions devraient aussi être fixés par le propriétaire, pas par l’opérateur du serveur. Si le serveur doit gagner de l’argent, il peut facturer le service de base lui-même. À l’inverse, si quelqu’un a créé quelque chose dans l’intention de le partager, et que la plateforme de l’époque fournissait un canal efficace pour cette diffusion tout en se présentant elle-même comme adaptée à ce partage, changer les règles en cours de route revient moralement à pirater le travail de cette personne. Une grande partie des contenus de ces plateformes n’aurait probablement jamais été mise en ligne si leurs véritables propriétaires avaient anticipé des restrictions arbitraires et des frais d’accès. Pour réécrire radicalement les règles, les contenus existants ne devraient être vendus que si l’auteur original y a explicitement consenti. Or Reddit a même activement restauré des publications que leurs auteurs avaient supprimées en masse pour empêcher ce genre d’abus
https://theoatmeal.com/comics/reaching_people
Les limites de débit y sont simplement beaucoup plus strictes. Créer un compte GitHub est gratuit et plutôt peu intrusif. Même connecté, on ne peut de toute façon pas faire tomber les serveurs, car toutes les API ont des limites de débit. C’est pour cela que des outils comme https://gitstar-ranking.com/ ont du mal lorsqu’ils tentent de récupérer les étoiles GitHub de tous les dépôts avec un compte gratuit. Les données réellement importantes, à savoir le code source, peuvent être clonées anonymement via un endpoint HTTPS, puis on peut effectuer la recherche de code localement. Des sites tiers comme https://grep.app/ fonctionnent aussi de cette façon. Dans le cas de Reddit/Twitter, les données sources — publications, commentaires, votes, tweets — ne sont plus fournies via API, ce qui rend difficile ou impossible la création d’outils tiers ; avec GitHub, la situation est assez différente, car les données sources restent facilement accessibles et seule la couche auxiliaire qu’est la recherche est bloquée pour les utilisateurs non connectés
Je me souviens qu’au lancement de StackOverflow, on le comparait à expertsexchange tout en le jugeant « ouvert ». Il est maintenant temps de passer de services centralisés à une architecture plus distribuée et fondée sur les microtransactions. Beaucoup de gens sur HN détesteront ça, mais les forums de questions-réponses, l’agrégation de liens d’actualité et de commentaires, l’hébergement Git avec flux de validation, wikis et systèmes de tickets peuvent — et devraient — être implémentés de manière entièrement distribuée. Des approches comme les technologies Kademlia/BitTorrent, IPFS ou des CryptoTokens pour les paiements par microtransactions sont possibles. Passer au 100 % distribué est la seule façon de garder ces choses « ouvertes » et à l’abri de la cupidité des entreprises. Même quand un fondateur démarre avec de bonnes intentions, à long terme le produit finit souvent par être vendu et les comptables prennent les commandes
En interprétant cela de bonne foi, la recherche exige pas mal de calcul, et peut donc devenir un gros vecteur d’attaque par déni de service
Je ne sais pas combien de données comportementales GitHub peut collecter auprès des utilisateurs connectés, ni à quel point elles sont utiles par rapport au code déjà public. Elles peuvent servir à déterminer quelles parties du code sont importantes, mais il est difficile d’y voir des informations propres à chaque utilisateur
Environ 0,5 % seulement du trafic de mon moteur de recherche vient d’humains. Je ne connais pas beaucoup de moteurs de recherche qui n’aient pas des statistiques similaires
Depuis le jour du rachat par MS, je ne vois plus de raison valable pour qu’un projet open source reste sur cette plateforme. Ce n’est pas comme s’il n’existait pas de bonnes alternatives accessibles avec un simple
git cloneIl existe donc plusieurs explications possibles au verrouillage de l’API
Quand je ne suis pas connecté, j’utilise Sourcegraph. Par rapport à l’ancienne recherche, il a même l’avantage d’être bien meilleur
C’est aussi simple que de coller l’URL d’un dépôt en partant de github.com. Par exemple, on peut rechercher
unitdans ce dépôt sur sourcegraph.com/github.com/rust-lang/rust/Une partie du fossé IA de Microsoft consiste à contrôler la capacité des concurrents à exploiter les informations de GitHub
Je ne serais pas surpris qu’ils commencent ensuite à limiter même
git clonegit clone, car cela casserait beaucoup trop de systèmes de CIIl faudrait dire adieu à une grande partie de NPM, à la gestion des paquets Go, aux scripts Jenkins, etc.
Dans mon souvenir, GitHub applique déjà des limites de débit pour ralentir les usages excessifs de clone ou d’API
Même si je suis d’accord avec la position de la personne qui a posé la question, je ne vois pas bien s’il était nécessaire de le dire comme ça
Je ne suis pas non plus entièrement d’accord avec cette position, dans la mesure où la recherche n’est pas forcément bon marché et peut être utilisée pour des attaques de type DOS. Je ne vois pas en quoi des phrases du genre « comme si monétiser jusqu’à chacun de mes passages aux toilettes ne suffisait pas, maintenant vous voulez suivre quelles lignes de code je regarde » peuvent aider. Il faut se calmer. L’argument de fond n’est pas non plus très solide. Les dépôts eux-mêmes ne sont pas bloqués derrière une connexion : les dépôts publics restent accessibles publiquement, y compris via
clone. Si l’auteur souhaite que son dépôt et son code soient utiles au public, au-delà du simple téléchargement et de la recherche, dès qu’un contributeur crée une issue ou envoie une PR, il devra de toute façon se connecterC’est utile pour comprendre comment quelque chose fonctionne, ou pour en discuter ailleurs que dans les issues GitHub. Un
cloneest généralement rapide, mais pas pour les très gros dépôts, et il se peut aussi qu’on n’ait pas assez d’espace sur l’appareil en cours. En plus, si beaucoup de gens se mettent à cloner à chaque fois au lieu de se connecter — d’autant que la connexion à GitHub est pénible à cause de l’authentification à deux facteurs — je me demande si la charge système diminuerait vraiment. Tout le monde n’a pas non plus envie d’avoir un compte GitHubHackerNews : il devient impossible de consulter la première page sans tomber sur des plaintes disant qu’un service gratuit et sans publicité n’est pas fourni aux utilisateurs non connectés
Dans ce cas-ci, votre code sert notamment à entraîner Copilot. Et même si ce n’était pas le cas, et que le service était vraiment aussi bien intentionné que vous le croyez, peut-on applaudir en voyant le service se dégrader pour pas mal d’utilisateurs ? Est-ce quelque chose d’intéressant et d’enthousiasmant ?
Le seul exemple qui me vient à l’esprit est le changement d’API de Reddit, mais c’était il y a un bon moment et ce n’est lié à la connexion que de manière assez lâche
Si vous voulez continuer à faire des recherches dans l’open source, https://sourcegraph.com/search ne nécessite pas de connexion et inclut aussi de grands projets qui ne sont pas sur GitHub
Pour info, je suis le CTO de Sourcegraph
Avant, j’espérais que la recherche GitHub puisse rivaliser avec
git clone + grep, mais je ne pensais pas que cela se paierait par une barrière de connexion. Dans mon souvenir, la connexion n’était requise que parce que c’était une fonctionnalité bêta, et je m’attendais à ce qu’elle soit supprimée une fois la recherche de base disponible