GitHub: Không thể tìm kiếm mã nếu chưa đăng nhập
(github.com/orgs)- Trong một thảo luận trên GitHub Community, việc tìm kiếm mã trong các kho công khai cũng không còn dùng được nếu chưa đăng nhập đã được nêu ra như một vấn đề; người đặt câu hỏi chỉ trích rằng điều này làm tổn hại khả năng tiếp cận mã công khai và tính hữu dụng của nguồn mở
- Bảo trì viên GitHub trả lời rằng tìm kiếm trên toàn bộ các kho từ lâu đã yêu cầu đăng nhập, và khi tăng cường chức năng tìm kiếm vào đầu năm 2023, họ đã mở rộng yêu cầu đăng nhập sang cả tìm kiếm trong từng kho riêng lẻ
- Lý do từ phía GitHub là để xử lý tải tìm kiếm dành cho nhà phát triển và giảm tình trạng máy chủ bị quá tải bởi các yêu cầu ẩn danh từ bot và các nguồn tương tự
- Những người tham gia thảo luận đặt câu hỏi liệu yêu cầu đăng nhập có đủ để chống bot hay không, vì kho công khai vẫn có thể được clone rồi tìm kiếm cục bộ; họ cũng nhắc đến các phương án thay thế như rate limit, CAPTCHA, hoặc giới hạn tìm kiếm đơn giản
- Về mặt thực tế, người dùng chưa đăng nhập không thể mở trực tiếp các liên kết tìm kiếm mã công khai, nên các cách đi vòng như grep.app, github1s,
grepcục bộ, công cụ tìm kiếm thông thường và mirror sang nhiều Git forge cũng được bàn luận
Yêu cầu đăng nhập được áp dụng cho tìm kiếm mã công khai
- GitHub Community Discussion #77046 có tiêu đề “Can no longer search code without being logged in”, bàn về tình trạng không thể tìm kiếm mã nếu chưa đăng nhập
- Người đặt câu hỏi giải thích rằng họ đã cố tìm kiếm một thứ trong kho của mình trên một thiết bị cũ, nhưng không thể tiếp tục vì yêu cầu đăng nhập
- Họ nói rằng phải truy cập trình quản lý mật khẩu, cần 2FA và YubiKey, nhưng bị kẹt vì chiếc laptop cũ không có cổng USB-C
- Họ cho biết muốn mọi người có thể dùng chức năng tìm kiếm mã trong kho công khai
- Người đặt câu hỏi chỉ trích rằng nếu là kho công khai thì người ta có thể clone rồi tìm kiếm và phân tích bằng công cụ chuyên dụng, nên rất khó chấp nhận lý do đặt yêu cầu đăng nhập cho tìm kiếm mã trên web
- Thảo luận này đã được đánh dấu Answered sau phản hồi từ phía GitHub; trang hiển thị 19 bình luận và 58 phản hồi
Phản hồi từ GitHub và căn cứ chính thức
- Bảo trì viên GitHub martinwoodward xin lỗi vì sự bất tiện và trả lời rằng tìm kiếm trên toàn bộ kho từ lâu đã yêu cầu đăng nhập
- Ông giải thích rằng khi nâng cấp chức năng tìm kiếm vào đầu năm 2023, họ đã mở rộng yêu cầu đăng nhập sang cả tìm kiếm trong từng kho riêng lẻ
- Ông đưa liên kết Code search now requires login làm thay đổi liên quan
- Mục đích chính, theo ông, là hỗ trợ tải tìm kiếm cho các nhà phát triển GitHub và ngăn máy chủ bị quá tải bởi các yêu cầu ẩn danh từ bot và các nguồn tương tự
- Trong thảo luận, một người tham gia khác đưa liên kết The technology behind GitHub’s new code search nói về cách triển khai tìm kiếm mã mới của GitHub
Tâm điểm phản đối: kho công khai và khả năng tiếp cận nguồn mở
- Nhiều người tham gia cho rằng vì mã trong kho công khai có thể được clone mà không cần đăng nhập, nên việc chặn cả tìm kiếm mã công khai bằng đăng nhập là quá mức
- Một người tham gia giải thích rằng họ thấy bất tiện khi người dùng bên ngoài bị buộc phải đăng nhập GitHub chỉ để xem mã nguồn công khai của mình
- Họ nói muốn chia sẻ các truy vấn tìm kiếm như
repo:USER/REPO,path:...,AND NOT path:**/_externalsbằng một URL hoặc nút duy nhất - Họ cho biết vì yêu cầu đăng nhập, họ phải thay thế bằng danh sách nhiều URL trực tiếp tới từng tệp
- Họ nói muốn chia sẻ các truy vấn tìm kiếm như
- Những người tham gia khác chỉ ra sự căng thẳng giữa việc GitHub tự nêu là “world's largest open source community” và việc hạn chế tìm kiếm mã công khai
- Một số bình luận nhớ rằng những hạn chế tương tự đã tồn tại từ trước khi Microsoft mua lại, và phản biện rằng hạn chế này không hoàn toàn mới
Tranh luận về chống bot và chi phí
- GitHub nêu lý do là tải do các yêu cầu bot ẩn danh, nhưng một số người tham gia cho rằng yêu cầu đăng nhập khó có thể chặn những người vận hành bot chuyên dụng
- Phương án thay thế được đề xuất là áp dụng rate limit trước, rồi yêu cầu CAPTCHA hoặc đăng nhập khi đạt ngưỡng
- Cũng có phản biện rằng vì kho công khai có thể được clone ẩn danh, bot có thể chuyển sang tìm kiếm cục bộ
- Về điểm này, một người tham gia khác phản bác với ý rằng clone không dùng năng lực tính toán tìm kiếm của GitHub, nên giảm được vector từ chối dịch vụ
- Cũng có ý kiến chỉ ra rằng dữ liệu đã clone có thể nhanh chóng trở nên stale
- Nếu chi phí tìm kiếm lớn, cũng có đề xuất phân tách: cung cấp các truy vấn đơn giản cho người dùng chưa đăng nhập bằng cách đơn giản hơn, còn các truy vấn phức tạp dành cho người dùng đã đăng nhập
Giới hạn của chính chức năng tìm kiếm và các trường hợp so sánh
- Một người tham gia nói rằng ngay cả khi đã đăng nhập, khi tìm kiếm toàn bộ kho công khai với
path:contributing.mdthì kết quả chỉ hiện 5 trang- Một người khác nói đây không phải vấn đề của riêng truy vấn đó mà là giới hạn hiện tại của tìm kiếm, và nhắc đến GitHub Community Discussion #9868 như một thảo luận liên quan
- Một người tham gia khác so sánh cách hoạt động tìm kiếm của SourceForge, Google Code archive, GitLab và Bitbucket
- Họ nói SourceForge và Google Code archive không có tìm kiếm
- Họ nói GitLab yêu cầu đăng nhập cho tìm kiếm toàn cục, còn tìm kiếm theo từng kho thì có thể dùng được
- Tìm kiếm của Bitbucket chuyển hướng sang đăng nhập, nhưng nếu tìm được kho thì có thể tìm kiếm mà không cần đăng nhập
Cách đi vòng và dịch vụ thay thế
- Một quy trình dùng clone cục bộ rồi
grepđược đưa ra như cách tìm kiếm nhanh trong một kho đơn lẻ khi chưa đăng nhập- Di chuyển tới
/dev/shm git clone https://github.com/user/repo- Di chuyển vào kho rồi chạy
grep -r "pattern" . - Xóa kho sau khi tìm kiếm
- Di chuyển tới
- Với tìm kiếm mẫu trên toàn GitHub, có người nhắc đến cách dùng
"pattern" site:github.comtrên công cụ tìm kiếm thông thường- Tuy nhiên, họ cũng nêu hạn chế là cách này không mạnh bằng tìm kiếm tích hợp của GitHub và một số mã có thể không được lập chỉ mục
- grep.app được nhắc đến như một công cụ thay thế hoặc bổ trợ, được giới thiệu là có thể tìm kiếm kho mà không cần đăng nhập
- Cũng có mẹo được chia sẻ rằng nếu thay
github.comtrong URL GitHub bằnggithub1s.com, có thể mở kho dưới dạng VS Code trực tuyến- Ví dụ,
https://github.com/libretro/px68k-libretro/vàhttps://github1s.com/libretro/px68k-libretro/được đem ra so sánh
- Ví dụ,
- Các Git forge thay thế như GitLab, Framagit, Gitea, Forgejo, Codeberg, Gogs cũng được nhắc đến; một số có thể bật tìm kiếm mã khi self-host
Lời khuyên về cách lưu trữ dự án
- Một người tham gia khuyên nên xem GitHub không phải là code forge duy nhất của dự án, mà là một trong các mirror
- Họ giải thích rằng Git là hệ thống quản lý phiên bản phân tán, nên nếu chỉ dùng mỗi GitHub thì sẽ trở thành điểm lỗi đơn lẻ
- Ví dụ được đưa ra là thêm nhiều remote để push lần lượt lên GitHub, Codeberg, Framagit và kho private
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 bình luận
Ý kiến trên Hacker News
Nếu nhìn vụ việc này theo hướng thiện chí nhất, thì GitHub Code Search mới sau khi dùng thực tế đúng là rất xuất sắc và có thể là một tính năng tiêu tốn nhiều tài nguyên vì phải xử lý nhiều việc nội bộ hơn hẳn so với công cụ tìm kiếm thông thường
Nếu giới hạn cho tài khoản đã đăng nhập, họ có thể tiết kiệm đáng kể tài nguyên máy chủ vốn sẽ phải dùng để xử lý crawler. Sự đánh đổi ở đây có vẻ gần như là: chi phí hạ tầng tìm kiếm tăng gấp 3~4 lần trở lên, hay chấp nhận bị chê vì yêu cầu đăng nhập. Tôi cũng từng tự làm một công cụ tìm kiếm mã cho kho GitHub, nhưng tìm kiếm mã mặc định của GitHub hữu ích đến mức giờ hầu như không còn dùng nó nữa: https://simonwillison.net/2020/Nov/28/datasette-ripgrep/
Mặt khác, người dùng hiện tại có thể khó chịu vì giờ không đăng nhập thì cũng không tìm kiếm được. Trong các tình huống như dùng PC của người khác, máy công cộng, tab ẩn danh, hay mất thời gian cho xác thực hai bước, điều này khá phiền. GitHub cũng có thể giữ lại một chế độ tìm kiếm cơ bản rẻ và nhanh cho người chưa đăng nhập, nhưng họ đã không làm vậy
Kết quả là giờ nếu không đăng ký GitHub thì không thể tham gia vào “mã nguồn mở được lưu trữ trên GitHub” nữa
grep là một công cụ đã 50 năm tuổi, không cần phải tự viết mã để tìm kiếm văn bản, cứ dùng phần mềm tự do là được. Đây đâu phải một startup nghiệp dư với 3 lập trình viên làm mỗi ứng dụng CRUD, mà là một trong những công ty công nghệ lớn và giàu nhất thế giới, vậy mà lại không thể làm nổi tìm kiếm văn bản tử tế nếu không bắt đăng nhập thì thật đáng chán. Nếu có cách giải thích thứ ba thì tôi muốn nghe thử
Cách giải thích của GitHub phần lớn nghe như ngụy biện. Việc ép xác thực trên một endpoint công khai không phải là giải pháp phù hợp cho vấn đề mà họ tuyên bố. Những người làm bot quan tâm đến endpoint này chỉ cần cho bot đăng nhập bằng tài khoản miễn phí là xong, nên cũng không ngăn được tải máy chủ theo cách có ý nghĩa
Việc này đã bắt đầu từ ít nhất 6 tháng trước và cũng đã được thông báo trong changelog: https://github.blog/changelog/2023-06-07-code-search-now-req...
Thảo luận HN: https://news.ycombinator.com/item?id=36230929
Xét từ góc độ kinh doanh thì hoàn toàn hiểu vì sao họ làm vậy. Nó đúng nghĩa biến người ta thành người dùng và tăng mức độ gắn kết của người dùng
Đã đến lúc ngừng coi GitHub như một nền tảng mở
GitHub là một khu vườn có tường rào khép kín giống như các dịch vụ khác. Việc nó lưu trữ rất nhiều dự án mã nguồn mở mà chúng ta dùng không khiến nó tốt hơn; thậm chí có thể còn tệ hơn, vì nó đã góp phần đẩy một phần hạ tầng đóng góp của các dự án này vào sau ổ khóa của tài khoản doanh nghiệp
Thậm chí tôi còn thấy tài khoản GitHub là phương án tốt hơn. Vì bạn có thể tham gia gần như vô hạn dự án mà không phải liên tục tạo tài khoản mới hoặc đăng nhập đi đăng nhập lại. Khó có thể nói GitHub đã chặn điều gì đó khác biệt một cách thực chất so với các lựa chọn khác trong lĩnh vực này. GitHub đã tạo ra phần mềm tốt và cung cấp miễn phí, duy trì nó khá cởi mở và dễ tiếp cận, tuân theo tiêu chuẩn ở những nơi có tiêu chuẩn, cung cấp API cho phần còn lại, và từ lâu đã cho các dự án mã nguồn mở dùng miễn phí lượng lớn lưu trữ và năng lực tính toán
Có Git hosting, hosting wiki, issue, GitHub Actions, GitHub Pages, và cả API đủ tốt. Có rất nhiều lý do để đưa một dự án mã nguồn mở lên GitHub
Đến năm 2023, web thực sự đã trở nên khép kín. StackOverflow, Reddit, GitHub và Twitter đều đã siết scraping và quyền truy cập API
Tác nhân kích hoạt là sự kết hợp giữa việc ngăn dữ liệu bị dùng để huấn luyện AI và áp lực lợi nhuận. Cũng có những thực tế thương mại như suy thoái của thị trường công nghệ, chủ sở hữu mới của Stack và X, hay việc Reddit thúc đẩy IPO. Về dài hạn, có vẻ thị trường dữ liệu độc quyền sẽ phát triển mạnh hơn. Các công cụ tìm kiếm, công cụ AI và bất kỳ ai cần dữ liệu rồi cũng sẽ phải trả tiền cho luồng dữ liệu gốc hoặc quyền truy cập API, và nếu chỉ những công ty giàu nhất mới mua nổi dữ liệu đó thì điều này cũng có thể dẫn tới vấn đề chống độc quyền
Nếu thứ gì đó thực sự là dữ liệu độc quyền, thì phần đền bù phải thuộc về chủ sở hữu, chứ không phải người vận hành một máy chủ Git ngẫu nhiên. Giá cả và điều kiện cũng phải do chủ sở hữu quyết định, không phải nhà vận hành máy chủ. Nếu máy chủ cần kiếm tiền thì cứ thu phí chính dịch vụ cốt lõi. Ngược lại, nếu ai đó tạo ra thứ gì đó để chia sẻ, và khi đó nền tảng cung cấp một kênh phân phối hiệu quả cho việc đó đồng thời tự quảng bá là phù hợp cho phân phối, thì việc đổi luật giữa chừng về mặt đạo đức chẳng khác nào cướp biển đối với tác phẩm của người đó. Một phần lớn dữ liệu trên những nền tảng như vậy có lẽ ngay từ đầu đã không được đăng lên nếu chủ sở hữu thực sự dự đoán trước các hạn chế tùy tiện và phí truy cập. Nếu muốn viết lại luật chơi một cách triệt để, thì chỉ nên bán nội dung cũ khi tác giả gốc đồng ý rõ ràng. Thế nhưng Reddit còn chủ động khôi phục cả những bài đăng mà tác giả đã xóa hàng loạt nhằm ngăn kiểu lạm dụng đó
https://theoatmeal.com/comics/reaching_people
Chỉ là giới hạn tốc độ nghiêm ngặt hơn nhiều. Tạo tài khoản GitHub là miễn phí và cũng không quá xâm phạm. Ngay cả khi đăng nhập thì mọi API vốn dĩ vẫn có giới hạn tốc độ để tránh việc làm quá tải máy chủ. Vì vậy những công cụ như https://gitstar-ranking.com/ gặp khó khi cố quét toàn bộ số sao GitHub của mọi repository bằng tài khoản miễn phí. Dữ liệu thực sự quan trọng là mã nguồn thì vẫn có thể clone ẩn danh qua endpoint HTTPS, rồi tìm kiếm mã trong đó. Các trang bên thứ ba như https://grep.app/ cũng khả thi theo cách này. Với Reddit/Twitter, dữ liệu gốc là bài đăng, bình luận, lượt upvote và tweet không còn được cung cấp qua API nữa nên việc xây công cụ bên thứ ba đã trở nên khó hoặc bất khả thi, còn GitHub thì dữ liệu gốc vẫn dễ tiếp cận và chỉ lớp phụ trợ là tìm kiếm bị chặn với người dùng chưa đăng nhập, nên tình hình khá khác
Tôi nhớ khi StackOverflow ra mắt, nó được so sánh với expertsexchange nhưng vẫn được đánh giá là “mở”. Giờ là lúc chuyển từ các dịch vụ tập trung sang một cấu trúc phân tán hơn và dựa trên microtransaction. Nhiều người trên HN có thể sẽ ghét điều này, nhưng diễn đàn hỏi đáp, tổng hợp link tin tức và bình luận, Git hosting cùng quy trình phê duyệt, wiki và hệ thống ticket hoàn toàn có thể và nên được triển khai theo cách phân tán hoàn toàn. Có thể dùng các công nghệ như Kademlia/BitTorrent, IPFS, hay CryptoTokens để thanh toán microtransaction. Chỉ có đi 100% phân tán mới là con đường để giữ những thứ này tiếp tục “mở” và thoát khỏi lòng tham doanh nghiệp. Dù người sáng lập khởi đầu với ý định tốt, về dài hạn vẫn cứ lặp lại chuyện sản phẩm bị bán đi và bộ phận kế toán nắm quyền
Nhìn theo hướng thiện chí thì tìm kiếm đòi hỏi khá nhiều năng lực tính toán, nên nó có thể trở thành một vector tấn công từ chối dịch vụ lớn
Tôi không rõ GitHub có thể thu thập bao nhiêu dữ liệu hành vi từ người dùng đăng nhập, và so với mã nguồn vốn đã công khai thì dữ liệu đó hữu ích đến mức nào. Nó có thể được dùng để xác định phần nào của mã là quan trọng, nhưng điều đó cũng khó xem là thông tin riêng theo từng người dùng
Chỉ khoảng 0,5% lưu lượng vào công cụ tìm kiếm của tôi là con người. Tôi không rõ những công cụ tìm kiếm không có thống kê tương tự thì vận hành ra sao
Theo tôi, kể từ ngày MS thâu tóm, không còn dự án mã nguồn mở nào có lý do chính đáng để ở lại nền tảng đó nữa. Cũng không phải là không có lựa chọn thay thế tốt mà chỉ cần
git clonemột lần là chuyển đi đượcVì thế có nhiều cách giải thích hợp lý cho việc khóa API
Khi chưa đăng nhập thì tôi dùng Sourcegraph, và đó còn có ưu điểm là tốt hơn nhiều so với tìm kiếm mặc định
Cách dùng đơn giản đến mức chỉ cần dán URL repository bắt đầu bằng github.com. Ví dụ, trên sourcegraph.com/github.com/rust-lang/rust/ bạn có thể tìm
unittrong repository nàyMột phần trong hào lũy AI của Microsoft nằm ở việc kiểm soát khả năng đối thủ dùng dữ liệu từ GitHub
Nếu bước tiếp theo họ bắt đầu hạn chế cả
git clonethì tôi cũng không ngạc nhiêngit clonethì sẽ có quá nhiều hệ thống CI bị phá hỏng đến mức tôi sẽ thực sự ngạc nhiênKhi đó sẽ phải nói lời tạm biệt với một phần lớn của NPM, quản lý gói của Go, các script Jenkins, v.v.
Theo tôi nhớ thì GitHub đã áp dụng giới hạn tốc độ để làm chậm việc clone quá mức hoặc dùng API quá nhiều rồi
Dù có đồng ý với quan điểm của người đặt câu hỏi, tôi cũng không rõ có cần phải nói theo cách đó hay không.
Tôi cũng không hoàn toàn đồng ý với lập trường đó, vì tìm kiếm không nhất thiết rẻ và có thể bị dùng cho các cuộc tấn công kiểu DOS. Tôi không hiểu những câu như “kiếm tiền từ mọi thứ còn chưa đủ, giờ còn định theo dõi xem tôi đang nhìn dòng code nào nữa à” thì giúp ích được gì. Nên bình tĩnh lại. Lập luận cốt lõi cũng không hẳn tốt. Bản thân kho lưu trữ không bị chặn bởi đăng nhập, nên kho công khai vẫn có thể được truy cập công khai, bao gồm cả clone. Nếu tác giả muốn kho và mã của mình hữu ích cho công chúng, thì vượt qua việc chỉ tải về và tìm kiếm, ngay khi người đóng góp tạo issue hoặc gửi PR thì đằng nào cũng phải đăng nhập
Điều đó cần thiết khi muốn hiểu một thứ hoạt động như thế nào, hoặc khi thảo luận ở nơi không phải GitHub issue. Clone thường nhanh, nhưng với các kho rất lớn thì không hẳn vậy, và thiết bị hiện tại cũng có thể không còn chỗ để clone. Hơn nữa, nếu nhiều người phải clone mỗi lần thay vì đăng nhập, đặc biệt khi đăng nhập GitHub lại phiền vì xác thực hai bước, thì tôi cũng nghi ngờ tải hệ thống có giảm đi hay không. Cũng không phải ai cũng muốn có tài khoản GitHub
HackerNews: giờ thậm chí không thể xem trang đầu nếu không thấy những lời phàn nàn rằng người dùng chưa đăng nhập không được cung cấp dịch vụ miễn phí và không quảng cáo
Trong trường hợp này, mã của bạn đang được dùng để huấn luyện Copilot và những thứ tương tự. Ngay cả nếu không phải vậy và dịch vụ đó thực sự thiện chí như bạn tin, thì bạn có thể vỗ tay khi thấy dịch vụ trở nên tệ hơn với khá nhiều người dùng không? Điều đó có gì thú vị hay đáng hào hứng sao?
Ví dụ duy nhất tôi nhớ ra là thay đổi API của Reddit, nhưng chuyện đó cũng khá lâu rồi và chỉ liên quan lỏng lẻo đến việc đăng nhập
Nếu muốn tiếp tục tìm kiếm trong mã nguồn mở, https://sourcegraph.com/search không yêu cầu đăng nhập và còn bao gồm cả các dự án lớn không có trên GitHub.
Nhân tiện, tôi là CTO của Sourcegraph
Trước đây tôi từng hy vọng tìm kiếm của GitHub có thể sánh với
git clone + grep, nhưng không ngờ cái giá phải trả lại là thêm rào cản đăng nhập. Theo tôi nhớ thì rào cản đăng nhập chỉ có vì đây là tính năng beta, và tôi đã nghĩ khi nó trở thành tìm kiếm mặc định thì rào cản đó sẽ được gỡ bỏ