2 điểm bởi GN⁺ 2024-03-06 | 1 bình luận | Chia sẻ qua WhatsApp
  • Radicle Heartwood là bản triển khai thứ ba của Radicle Protocol, cung cấp một stack cộng tác và phát hành mã theo mô hình ngang hàng mà không cần code forge tập trung
  • Kho lưu trữ bao gồm công cụ dòng lệnh rad dành cho lập trình viên và network daemon radicle-node
  • Được thiết kế để thay thế các code forge như GitHub và GitLab, với mục tiêu cốt lõi là bảo mật và phi tập trung, đồng thời giữ vững chủ quyền của người dùng
  • Môi trường cài đặt yêu cầu Linux hoặc hệ điều hành họ Unix, Git 2.34 trở lên, và OpenSSH 9.1 trở lên có kèm ssh-agent
  • Hỗ trợ cả cài đặt bằng binary lẫn từ mã nguồn Rust, nhưng email phản hồi sẽ được tự động đăng lên kênh Zulip công khai, nên tên và địa chỉ email có thể bị lộ

Những gì Radicle Heartwood cung cấp

  • Heartwood là phiên bản lặp thứ ba của Radicle Protocol và là một stack hoàn chỉnh cho cộng tác và phát hành mã theo mô hình ngang hàng
  • Kho lưu trữ chứa các thành phần chính cần cho việc triển khai Heartwood
    • rad: giao diện dòng lệnh thân thiện với người dùng
    • radicle-node: network daemon
  • Radicle được thiết kế như một lựa chọn thay thế cho các code forge như GitHub và GitLab
    • Mục tiêu là bảo mật, phi tập trung, và gìn giữ chủ quyền cũng như tự do của người dùng
  • Thông tin chung có tại Radicle home page
  • Có thể trao đổi về dự án qua Zulip chat
  • Cách Radicle hoạt động được giải thích chi tiết trong Protocol Guide

Cài đặt và chạy

  • Các yêu cầu cài đặt gồm có
    • Hệ điều hành nền tảng Linux hoặc Unix
    • Git 2.34 trở lên

      • OpenSSH 9.1 trở lên có kèm ssh-agent
      • Cài đặt binary cần curltar, và có thể cài bản phát hành mới nhất bằng lệnh sau
curl -sSf https://radicle.dev/install | sh
- Binary cũng có thể tải từ trang [download](https://radicle.dev/download)
- Để cài từ mã nguồn cần **Rust toolchain**, rồi chạy các lệnh sau trong kho lưu trữ
cargo install --path crates/radicle-cli --force --locked --root ~/.radicle
cargo install --path crates/radicle-node --force --locked --root ~/.radicle
cargo install --path crates/radicle-remote-helper --force --locked --root ~/.radicle
- Cũng có thể cài trực tiếp từ seed node
cargo install --force --locked --root ~/.radicle \
    --git https://seed.radicle.dev/z3gqcJUoA1n9HaHKufZs5FCSGazv5.git \
    crates/radicle-cli crates/radicle-node crates/radicle-remote-helper
- File **systemd unit** cho node nằm trong thư mục `/systemd` và có thể dùng làm điểm khởi đầu để tùy biến thêm
- Để chạy ở chế độ debug, xem [HACKING.md](https://radicle.network/nodes/iris.radicle.network/rad%3Az3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/HACKING.md)

Phản hồi, đóng góp, giấy phép

  • Có thể gửi phản hồi qua rad issue, Zulip, hoặc feedback@radicle.dev
  • Phản hồi gửi qua email sẽ được tự động đăng lên kênh #feedback công khai trên Zulip
    • Trong quá trình đăng, header From sẽ được công khai, thường bao gồm tên và địa chỉ email
  • Hướng dẫn đóng góp có trong CONTRIBUTING.mdHACKING.md
  • Radicle được phát hành theo các điều khoản của giấy phép MITApache License 2.0
  • Chi tiết xem tại LICENSE-APACHELICENSE-MIT

1 bình luận

 
GN⁺ 2024-03-06
Ý kiến trên Hacker News
  • Tôi là đồng sáng lập Radicle. Nếu tò mò về cách giao thức hoạt động bên trong, bạn có thể bắt đầu từ tài liệu: https://docs.radicle.xyz/
    Tài liệu vẫn đang được viết

    • Đọc tài liệu thì tôi chú ý đến phần “kho lưu trữ Radicle có thể công khai/riêng tư, và có thể chứa mã nguồn, tài liệu, tập dữ liệu tùy ý”
      Về cơ bản, nếu đây là một ứng dụng chia sẻ tệp P2P, tôi thắc mắc việc lạm dụng được xử lý ở phần nào của giao thức. Nếu không thì tôi không rõ nó khác gì các ứng dụng chia sẻ tệp thế hệ trước như BitTorrent hay Winny, nơi người ta tùy ý chia sẻ nội dung có bản quyền như phim, nhạc, phần mềm. Có vẻ chỉ một số ít người dùng độc hại cũng có thể phá hỏng mọi thứ, và tôi cũng muốn biết liệu có thể tách các mạng “cá nhân” để chắc chắn rằng mình không tham gia vào những thứ bất hợp pháp hay không
    • Dự án thú vị. Tôi tò mò về mô hình kinh doanh
      Trên Crunchbase có ghi là đã nhận đầu tư 12 triệu USD, nên có lẽ sẽ có kế hoạch kiếm tiền
    • Tôi không chủ động tìm giải pháp thay thế cho các dịch vụ độc quyền như GitHub hay GitLab, nhưng thỉnh thoảng có người hỏi tôi về phương án thay thế. Tôi thích các giải pháp tự host phân tán, nên hướng đi của Radicle có vẻ đúng, nhưng tôi vướng ở chỗ yêu cầu ghi là hệ điều hành dựa trên Linux hoặc Unix
      Với kiểu dự án mà tôi hỗ trợ, điều này có thể là điểm chí mạng. Mã có vẻ viết bằng Rust, nên tôi muốn biết có kế hoạch hỗ trợ MS Windows không. Có thể xem Mac OS là thuộc họ Unix, đúng không? Dù không hỗ trợ Windows chính thức, liệu có thể có bản port MSYS2 không
      Bổ sung một chút bối cảnh: tôi không ở vị trí ra quyết định như chọn nhà cung cấp dịch vụ, mà có liên quan đến một tổ chức bán chính phủ đang đưa một cơ sở mã nguồn mở khá lớn lên GitHub. Thỉnh thoảng tôi có cơ hội đề xuất một số ý tưởng, nhưng việc có được chấp nhận hay không không thuộc thẩm quyền của tôi. Tổ chức này có động lực lớn để có khả năng phục hồi, không bị chi phối bởi chính sách của nhà cung cấp tư nhân, đồng thời cũng muốn làm những “điều tốt” như tính bền vững hay khả năng tiếp cận rộng rãi. Là một tổ chức chính phủ châu Âu điển hình, GitHub mâu thuẫn với các chính sách như vậy
      Cũng có các cơ quan chính phủ khác phụ trách lưu trữ hoặc hỗ trợ mạng, nhưng họ thiếu năng lực hoặc vẫn mắc kẹt trong cách làm cũ, và thường xuyên rơi vào bẫy do nhà cung cấp đặt ra. Chẳng hạn, một dịch vụ lưu trữ đã áp dụng toàn diện DataBricks mà thậm chí không biết đó là một sản phẩm thương mại mã nguồn đóng. Vì vậy tôi ít kỳ vọng tổ chức đó sẽ tận dụng tốt một giải pháp tự host, và một giải pháp phân tán trông có vẻ phù hợp hơn. Tuy nhiên, công cụ không chạy được trên các môi trường PC phổ biến chính thì không thể dùng được
    • Tôi tò mò đã có bao nhiêu ngân sách được rót vào Radicle, bao nhiêu người đã làm trong bao lâu, và ai đang dùng nó
    • Tôi thích thiết kế website và ứng dụng. Nhiều dự án mã nguồn mở thường sụp đổ hoàn toàn ở phần thiết kế thị giác, nhưng dù chỉ là yếu tố bề ngoài, thiết kế đẹp vẫn khiến người ta muốn tương tác với dự án nhiều hơn
      Tôi cũng tò mò trước đây và hiện tại các bạn kỳ vọng mức độ được chấp nhận đến đâu, và kết quả thực tế có khớp với kỳ vọng đó không
  • Thật thú vị khi theo dõi Radicle đã tiến hóa như thế nào trong khoảng 5 năm qua. Tôi đã tham dự workshop Protocol Berg 2023, và tôi nghĩ họ đã tạo ra một thứ khá mạnh mẽ và mới mẻ
    Điểm đặc biệt thú vị là ngay cả các tính năng cộng tác cũng ưu tiên cục bộ. Không có internet vẫn có thể gửi patch và issue, và mỗi khi GitHub gặp sự cố, cả nhóm không cần phải dán mắt vào HN nữa

  • Có vẻ là một dự án ổn cho mục đích của nó, nhưng tôi nghĩ bản thân Git vốn đã là mã nguồn mở và P2P rồi. Không cần nhận các tệp nhị phân bằng sh <(curl), chỉ cần kết nối tới một máy chủ Git khác rồi dùng lệnh Git để trực tiếp lấy mã hoặc merge là được
    Thứ Git không có là issue cho mã, wiki, thảo luận, GitHub Pages, và quan trọng nhất là mạng lưới hồ sơ nhà phát triển. Cần một cách để đưa metadata của dự án vào chính .git sao cho commit mã nguồn không bị trộn lẫn với wiki hay issue. Có thể dùng các tham chiếu độc lập như git notes
    https://git-scm.com/docs/git-notes

    • Git được thiết kế với phần nào ý tưởng về tương tác P2P, nhưng thực tế không có cách phân phối nào như vậy. Mọi hình thức phân phối đều dùng mô hình client-server, vì chỉ riêng Git thì thiếu chức năng để triển khai nguyên trạng trên một mạng P2P
      Ví dụ, không có cách nào xác minh kho lưu trữ nhận được bằng git clone có đúng là kho lưu trữ tôi đã yêu cầu hay không. Vì vậy phải clone từ một nguồn tin cậy, tức là một máy chủ đã biết. Điều này không phù hợp với P2P thực dụng
      Radicle giải quyết vấn đề này bằng cách cấp định danh kho lưu trữ ổn định[0] có thể xác minh cục bộ, cho phép các bên không đáng tin cậy cung cấp kho lưu trữ
      [0]: https://docs.radicle.xyz/guides/protocol#trust-through-self-...
    • Radicle bổ sung theo dõi issue và pull request. Có lẽ cũng sẽ bao gồm một số tính năng khác
      Trên di động, nếu bấm các nút ở cuối liên kết gốc, bạn có thể thấy các tab theo dõi issue, pull request, v.v.
    • Fossil(https://fossil-scm.org) đưa issue, wiki, v.v. vào bên trong kho lưu trữ của dự án
    • “Quan trọng nhất là mạng lưới hồ sơ nhà phát triển” ư, không biết thế giới đã thành ra thế nào nữa
      Tôi nhớ Gerrit ngày trước từng lưu code review trong Git
    • Git truyền thống không tránh được kiểm duyệt như tin tức gần đây liên quan đến Nintendo. Ý tưởng như thế này cứ quanh quẩn trong đầu tôi, nên thật sự rất vui khi thấy có người đã làm được phần việc khó khăn đó
  • Tài liệu có ghi rằng “điều quan trọng là chỉ đăng các kho lưu trữ mà bạn sở hữu hoặc là maintainer, và trao đổi với các maintainer khác để tránh tạo các định danh kho lưu trữ trùng lặp”
    Tôi từng gặp những người lấy code của tôi rồi đưa lên GitHub, và cũng đã thấy nhiều trường hợp dù trong tài liệu sản phẩm hay UI trung gian có ghi “xin đừng làm X, vì sẽ gây vấn đề cho người dùng khác”, chẳng ai đọc, suy nghĩ hay quan tâm mà cứ lập tức làm X. Vì vậy tôi nghĩ nhiều người sẽ không tuân theo yêu cầu này trong tài liệu; thậm chí trang chủ chỉ hướng dẫn cách push code, còn yêu cầu “quan trọng” này lại nằm trong hướng dẫn người dùng mà hầu như chẳng ai đọc
    Rốt cuộc, điều khá đáng lo là một hành vi trông có vẻ hợp lý — cứ push mã nguồn mở đang làm theo hướng dẫn trên trang chủ — theo thời gian có thể làm xáo trộn hoặc gây nhầm lẫn điều gì đó quan trọng do cách giao thức và lưu trữ hoạt động

    • Tôi không thấy có vấn đề gì đặc biệt ở đây. Hiện nay vị trí chính thức của một kho lưu trữ cũng được tìm qua các kênh bên ngoài như một mạng xã hội hay website riêng
      Trên GitHub, số sao có thể mang lại thêm độ tin cậy; còn trong Radicle, thứ tương ứng là số seed của một kho lưu trữ cụ thể
    • Không nên bực mình với mọi người vì họ bỏ qua tài liệu hay hướng dẫn. Đó là hành vi rất logic
      Thường trong một ngày dùng máy tính, ta thấy hàng chục thông báo/hướng dẫn và cũng dùng hàng chục công cụ. Nếu nghĩ đến thời gian cần để đọc hết tất cả các hướng dẫn đó và đọc kỹ tài liệu của mọi công cụ thì sẽ quá lâu
      Vì vậy tốt hơn nhiều là không đọc mà dùng heuristic. Ví dụ, khi đóng một tài liệu có thay đổi chưa lưu, ta biết hộp thoại sẽ hỏi “bỏ thay đổi chứ?”, nên không cần đọc. Đây là điều tốt
      Kết luận là cần thiết kế phần mềm dựa trên thực tế rằng mọi người hành xử như vậy. Thường thì có thể làm được. Nếu có ví dụ cụ thể, tôi nghĩ có thể đề xuất giải pháp tốt hơn cách “nhờ họ làm và hy vọng họ đọc”
    • Theo kiểu GitHub thì chẳng phải có thể thêm thông báo bản quyền vào code để nói kho của mình là bản gốc, và biến việc thay đổi thông báo bản quyền thành bất hợp pháp sao? Điều này cũng có thể áp dụng ở đây
  • Chúc mừng ra mắt. Tôi đã theo dõi dự án này và thật sự háo hức khi thấy nó trưởng thành nhiều như vậy. Tôi tò mò cách tốt nhất để chuyển các dự án hiện đang ở GitHub sang là gì. Cũng muốn biết có chế độ mirror nào để thử nghiệm không

    • Hiện chưa có mirroring tích hợp sẵn, nhưng chúng tôi đang xem xét. Về lý thuyết, việc này nên đơn giản đến mức chỉ cần thiết lập một tác vụ cron mỗi giờ kéo từ GitHub rồi push lên Radicle
      git pull github master
      git push rad master
  • Tôi tự hỏi các kho lưu trữ này sẽ dễ được phát hiện đến mức nào đối với người dùng phổ thông. Có vẻ không có https://app.radicle.xyz/robots.txt, nên có lẽ các công cụ tìm kiếm được phép lấy dữ liệu, và thực tế khi tìm site:app.radicle.xyz trên Google và DDG thì có kết quả
    Hiện chúng chưa xuất hiện ở vị trí cao nếu không lọc theo site, nhưng thứ hạng có thể cải thiện
    Sẽ rất hay nếu có công cụ hỗ trợ và tích hợp CI. Cuối cùng thì có lẽ sẽ là một vòng lặp kiểu while true; do wait_repo_update; git pull && ./run_ci.sh; done, nhưng cần một hình thức tốt hơn có thể giới hạn chỉ với các push từ định danh đã tin cậy
    Cuối cùng, cũng cần kho lưu trữ artifact. Tuy nhiên có thể Radicle không cần giải quyết mọi thứ. Đặc biệt, một mạng phân tán để chia sẻ các binary lớn có vẻ sẽ khá nhanh chóng bị dùng vào những mục đích không mong muốn

    • Hiện chúng tôi đang làm nhiều tích hợp CI, và cũng đang xây dựng CI native của riêng mình phù hợp với nhu cầu của chúng tôi
    • Ý hay. Các gateway như app.radicle.xyz có lẽ nên cho phép crawler lập chỉ mục toàn bộ tập kho lưu trữ của mạng
  • Tôi mong mọi người định nghĩa rõ “P2P” hoặc cách gọi phổ biến hơn là “phân tán” chính xác nghĩa là gì. Hiện giờ nó đã trở thành một buzzword mơ hồ đến mức có thể được dùng với bất cứ nghĩa nào

    • Tôi chưa thấy thuật ngữ này bị lạm dụng thường xuyên. Định nghĩa mà Radicle và hầu hết các hệ thống P2P dùng giống với định nghĩa trên Wikipedia[0], đặc biệt là phần “các peer là những bên tham gia có quyền hạn và năng lực ngang nhau trong mạng”
      Vì vậy, hệ thống P2P là hệ thống mà mọi bên tham gia đều có “quyền hạn ngang nhau trong mạng”. Thường điều đó cũng có nghĩa là tất cả đều chạy cùng một phần mềm
      [0]: https://en.wikipedia.org/wiki/Peer-to-peer
  • Hướng dẫn cài đặt lại là curl -sSf [https://radicle.xyz/install](<https://radicle.xyz/install>;) | sh, kỳ vọng của tôi lập tức sụp đổ trước thứ rác rưởi curl-bash
    Kiểu cài đặt này là một tín hiệu mạnh của việc phát triển thiếu suy nghĩ. Nếu dự án này nổi lên, tôi có cảm giác sẽ được chứng kiến một thảm họa bảo mật. Hy vọng một ngày nào đó sẽ có một “giải pháp thay thế GitHub P2P mã nguồn mở” không bắt đầu bằng cách cài đặt tệ nhất

    • Đây gần như là một phản ứng thái quá đến mức vô lý
      Rất nhiều người đã biết rõ rủi ro của trình cài đặt qua pipe. Theo logic đó thì phải vứt bỏ Homebrew [1](hơn 38 nghìn sao GitHub), PiHole [2](hơn 46 nghìn sao), Chef [3], RVM [4] và vô số dự án mã nguồn mở dùng trình cài đặt tự động một bước pipe vào bash
      Cách phản ứng hợp lý hơn là hợp tác với nhà phát triển để cung cấp phương án cài đặt thay thế trong tài liệu hoặc giải thích rủi ro tốt hơn, chứ không phải kiểu đốt cả nhà để bắt rệp
      [1] https://brew.sh/
      [2] https://github.com/pi-hole/pi-hole
      [3] https://docs.chef.io/chef_install_script/#run-the-install-sc...
      [4] https://rvm.io/rvm/install
    • Phản ứng hơi kịch tính quá không?
      Về vấn đề truyền tải bị gián đoạn, trừ khi hệ thống của bạn có một lệnh nguy hiểm khớp với ^(t(e(m(p(d(ir?)?)?)?)?|a(r(g(et?)?)?)?)?|i(n(_(p(a(th?)?)?)?|fo?)?)?|s(u(c(c(e(s?s)?)?)?)?)?|f(a(t(al?)?)?)?|m(a(in?)?)?|w(a(rn?)?)?|u(rl?)?), thì script vẫn an toàn
      Sau khi xử lý chuyện đó, tôi tự hỏi nó khác gì so với việc chỉ cung cấp script mà không cung cấp lệnh chạy. Nếu muốn xem xét, bạn có thể tải script xuống rồi chạy riêng. Hình như có cách phát hiện script được pipe và script được tải xuống, nhưng có lẽ không hoạt động với một script nhỏ như thế này
    • Có ở đây [0]. Dự án vẫn chưa phát hành chính thức nên còn vài mảnh cần xử lý, và hiện trọng tâm đang ở chỗ hơi khác. Cũng có thể build từ source bằng cargo của Rust [1]
      [0] https://files.radicle.xyz/latest/
      [1] https://app.radicle.xyz/nodes/seed.radicle.garden/rad:z3gqcJ...
    • Nhận hay không là tùy bạn, tin maintainer hay không cũng vậy. Cách cài đặt không phải là thứ quyết định có tin maintainer hay không, kể cả khi đó là curl-bash
  • Cứ mỗi khi thị trường crypto đi lên là tôi lại nghe nói về Radicle. Có ai dùng nó nghiêm túc không?
    Câu này bị downvote ngay lập tức nhỉ. Tôi hỏi nghiêm túc đấy, tôi tò mò không biết Radicle đã tiêu tốn bao nhiêu ngân sách, có bao nhiêu người làm, và ai đang dùng nó

    • Câu hỏi công bằng
      Tôi làm trong ngành crypto và cũng có ấn tượng tương tự. Lần cuối tôi nghe về Radicle là ở đợt tăng giá trước, còn trong thị trường xuống thì im ắng. Ai cũng nói thị trường xuống là thời gian để xây dựng, và Radicle rõ ràng là công cụ dành cho developer, nên chuyện này khá lạ
  • Tôi tò mò liệu có kế hoạch hỗ trợ use case chỉ cung cấp repository cho một tập hợp node nhất định không. Có lẽ sẽ có những người không muốn ở trên GitHub nhưng vẫn muốn cộng tác riêng tư

    • Có. Trong Radicle, những thứ như vậy được gọi là repository riêng tư. Chúng không hiển thị với phần còn lại của mạng, và chỉ được chia sẻ giữa các peer đã tin cậy
      Tuy nhiên dữ liệu không được mã hóa khi lưu trữ, nên không thể lưu trên các node trung gian không thuộc tập hợp tin cậy