- Radicle Heartwood เป็นการทำงานจริงครั้งที่สามของ Radicle Protocol โดยให้สแตกสำหรับการทำงานร่วมกันและเผยแพร่โค้ดแบบเพียร์ทูเพียร์โดยไม่ต้องพึ่ง code forge แบบรวมศูนย์
- รีโพซิทอรีนี้มีเครื่องมือบรรทัดคำสั่ง
rad สำหรับนักพัฒนาใช้งานโดยตรง และเน็ตเวิร์กดีมอน radicle-node รวมอยู่ด้วย
- ออกแบบมาเพื่อเป็นทางเลือกแทน code forge อย่าง GitHub และ GitLab โดยมีเป้าหมายหลักคือ ความปลอดภัยและการกระจายศูนย์ รวมถึงการรักษาอธิปไตยของผู้ใช้
- สภาพแวดล้อมสำหรับติดตั้งต้องเป็น Linux หรือระบบปฏิบัติการตระกูล Unix, Git 2.34 ขึ้นไป, และ OpenSSH 9.1 ขึ้นไป ที่มี
ssh-agent
- รองรับทั้งการติดตั้งแบบไบนารีและการติดตั้งจากซอร์ส Rust แต่ฟีดแบ็กทางอีเมลจะถูก โพสต์อัตโนมัติไปยังช่อง Zulip สาธารณะ ซึ่งอาจทำให้ชื่อและที่อยู่อีเมลถูกเปิดเผย
สิ่งที่ Radicle Heartwood มีให้
- Heartwood เป็นเวอร์ชันวนซ้ำครั้งที่สามของ Radicle Protocol และเป็นสแตกครบชุดสำหรับการทำงานร่วมกันและการเผยแพร่โค้ดแบบเพียร์ทูเพียร์
- รีโพซิทอรีนี้มีองค์ประกอบหลักที่จำเป็นสำหรับการใช้งาน Heartwood
rad: อินเทอร์เฟซบรรทัดคำสั่งที่ใช้งานง่าย
radicle-node: เน็ตเวิร์กดีมอน
- Radicle ถูกออกแบบมาเป็นทางเลือกแทน code forge อย่าง GitHub และ GitLab
- เป้าหมายคือการรักษา ความปลอดภัย, การกระจายศูนย์, อธิปไตยและเสรีภาพของผู้ใช้
- ดูข้อมูลทั่วไปได้ที่ Radicle home page
- สนทนาเกี่ยวกับโปรเจกต์ได้ที่ Zulip chat
- วิธีการทำงานของ Radicle อธิบายไว้อย่างละเอียดใน Protocol Guide
การติดตั้งและการใช้งาน
- ข้อกำหนดในการติดตั้งมีดังนี้
- ระบบปฏิบัติการ Linux หรือ Unix
-
Git 2.34 ขึ้นไป
- OpenSSH 9.1 ขึ้นไป ที่มี
ssh-agent
- การติดตั้งแบบไบนารีต้องใช้
curl และ tar โดยติดตั้งรีลีสล่าสุดได้ด้วยคำสั่งต่อไปนี้
curl -sSf https://radicle.dev/install | sh
- สามารถดาวน์โหลดไบนารีได้จากหน้า [download](https://radicle.dev/download) เช่นกัน
- หากต้องการติดตั้งจากซอร์ส ต้องมี **Rust toolchain** แล้วรันคำสั่งต่อไปนี้ภายในรีโพซิทอรี
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
- สามารถติดตั้งโดยตรงจาก 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
- ไฟล์ **systemd unit** สำหรับโหนดอยู่ในโฟลเดอร์ `/systemd` และสามารถใช้เป็นจุดเริ่มต้นสำหรับการปรับแต่งเพิ่มเติมได้
- ดูการรันในโหมดดีบักได้ที่ [HACKING.md](https://radicle.network/nodes/iris.radicle.network/rad%3Az3gqcJUoA1n9HaHKufZs5FCSGazv5/tree/HACKING.md)
ฟีดแบ็ก, การมีส่วนร่วม, ใบอนุญาต
- สามารถส่งฟีดแบ็กได้ทาง
rad issue, Zulip หรือ feedback@radicle.dev
- ฟีดแบ็กที่ส่งทางอีเมลจะถูกโพสต์อัตโนมัติไปยัง ช่อง #feedback สาธารณะ บน Zulip
- ระหว่างการโพสต์ เฮดเดอร์
From จะถูกเปิดเผย ซึ่งโดยทั่วไปจะมีชื่อและที่อยู่อีเมลรวมอยู่ด้วย
- แนวทางการมีส่วนร่วมอยู่ใน CONTRIBUTING.md และ HACKING.md
- Radicle เผยแพร่ภายใต้เงื่อนไขของ MIT License และ Apache License 2.0
- รายละเอียดอยู่ใน LICENSE-APACHE และ LICENSE-MIT
1 ความคิดเห็น
ความเห็นจาก Hacker News
ผมเป็นผู้ร่วมก่อตั้ง Radicle เอง ถ้าอยากรู้ว่า โปรโตคอลทำงานภายในอย่างไร ให้เริ่มจากอ่านเอกสารได้เลย: https://docs.radicle.xyz/
เอกสารยังเขียนไม่เสร็จ
ถ้ามองว่าโดยพื้นฐานมันคือ แอปแชร์ไฟล์แบบ P2P ก็เลยสงสัยว่าปัญหาการใช้งานในทางที่ผิดถูกจัดการไว้ตรงไหนของโปรโตคอล ไม่อย่างนั้นก็ไม่เห็นว่ามันต่างจากแอปแชร์ไฟล์ยุคก่อนอย่าง BitTorrent หรือ Winny ที่ใช้แชร์หนัง เพลง หรือซอฟต์แวร์ละเมิดลิขสิทธิ์แบบสุ่ม ๆ อย่างไร ดูเหมือนผู้ใช้ไม่หวังดีแค่ไม่กี่คนก็อาจทำระบบเสียหายได้ และก็สงสัยด้วยว่าจะสามารถแยกเครือข่ายแบบ “ส่วนตัว” เพื่อให้มั่นใจได้หรือไม่ว่าตัวเองไม่ได้มีส่วนกับสิ่งผิดกฎหมาย
ใน Crunchbase ระบุว่าได้รับเงินลงทุน 12 ล้านดอลลาร์ ก็น่าจะมีแผนสร้างรายได้อยู่
สำหรับประเภทโปรเจ็กต์ที่ผมช่วยอยู่ ตรงนี้อาจเป็นจุดตัดสินเลย โค้ดดูเหมือนเขียนด้วย Rust ก็เลยอยากรู้ว่ามีแผนรองรับ MS Windows ไหม ส่วน Mac OS ก็นับว่าอยู่ในสาย Unix ได้อยู่แล้วใช่ไหม? ต่อให้ยังไม่รองรับ Windows อย่างเป็นทางการ ก็สงสัยว่าอย่างน้อยพอร์ตไป MSYS2 ได้หรือเปล่า
ขอเสริมบริบทนิดหนึ่ง ผมไม่ได้อยู่ในตำแหน่งที่ตัดสินใจเลือกผู้ให้บริการอะไรแบบนั้น แต่เกี่ยวข้องกับองค์กรกึ่งภาครัฐที่มีโค้ดโอเพนซอร์สจำนวนมากอยู่บน GitHub บางครั้งผมพอมีโอกาสเสนอไอเดียบางอย่างได้ แต่ไม่ได้มีอำนาจตัดสินว่าจะนำไปใช้หรือไม่ องค์กรนี้มีแรงจูงใจสูงที่จะสร้างความยืดหยุ่นไม่ให้ถูกนโยบายของผู้ให้บริการเอกชนชี้นำ และยังอยากทำ “สิ่งที่ดี” อย่างความยั่งยืนหรือการเข้าถึงอย่างกว้างขวางด้วย ในฐานะองค์กรภาครัฐแบบยุโรปทั่วไป GitHub จึงค่อนข้างขัดกับนโยบายเหล่านั้น
ยังมีหน่วยงานรัฐอื่นที่ดูแลงานเก็บรักษาข้อมูลหรือสนับสนุนเครือข่ายอยู่ด้วย แต่ขีดความสามารถไม่พอหรือยังติดวิธีคิดแบบเก่า และก็มักตกหลุมพรางที่ผู้ขายวางไว้ ตัวอย่างเช่น มีบริการด้านการเก็บรักษาที่นำ DataBricks ไปใช้ทั้งระบบโดยไม่รู้ด้วยซ้ำว่ามันเป็นผลิตภัณฑ์เชิงพาณิชย์แบบปิดซอร์ส ดังนั้นผมจึงไม่ค่อยคาดหวังว่าองค์กรนั้นจะใช้โซลูชัน self-hosted ได้ดีนัก และโซลูชันแบบกระจายศูนย์ก็ดูน่าสนใจกว่า เพียงแต่เครื่องมือที่ไม่ทำงานบนสภาพแวดล้อมพีซีหลักของผู้ใช้ทั่วไปนั้นใช้ไม่ได้
แล้วก็อยากรู้ด้วยว่าแต่ก่อนกับตอนนี้คาดหวังการยอมรับในระดับไหนไว้ และผลลัพธ์จริงออกมาตรงกับความคาดหวังหรือไม่
น่าสนใจมากที่ได้ดูว่า Radicle ค่อย ๆ พัฒนามาตลอดราว 5 ปีที่ผ่านมา ผมไปร่วมเวิร์กช็อปที่ Protocol Berg 2023 และคิดว่าพวกเขาสร้างสิ่งใหม่ที่ทรงพลังพอสมควร
จุดที่น่าสนใจมากเป็นพิเศษคือ แม้แต่ ฟีเจอร์สำหรับการทำงานร่วมกันก็ยังเป็น local-first ต่อให้ไม่มีอินเทอร์เน็ตก็ยังส่ง patch กับ issue ได้ และเวลาที่ GitHub มีปัญหา ทั้งทีมก็ไม่จำเป็นต้องไปเฝ้า HN กันหมด
ถ้ามองตามวัตถุประสงค์ก็ดูเป็นโปรเจ็กต์ที่ใช้ได้ แต่ผมคิดว่า Git เองก็เป็น โอเพนซอร์สและ P2P อยู่แล้ว สามารถต่อไปยัง Git server อื่นแล้วดึงหรือ merge โค้ดด้วยคำสั่ง Git ได้ตรง ๆ โดยไม่ต้องมารับไบนารีผ่าน
sh <(curl)สิ่งที่ Git ไม่มีคือ issue ของโค้ด, wiki, การสนทนา, GitHub Pages และที่สำคัญที่สุดคือเครือข่ายโปรไฟล์นักพัฒนา ต้องมีวิธีใส่ metadata ของโปรเจ็กต์ลงไปใน
.gitเอง เพื่อไม่ให้ source code commit ปะปนกับ wiki หรือ issue อาจใช้ reference แยกอิสระแบบgit notesได้ก็ได้https://git-scm.com/docs/git-notes
ตัวอย่างเช่น ไม่มีวิธีตรวจสอบได้เลยว่า repository ที่ได้จาก
git cloneคือ repository ที่ผมร้องขอจริง ๆ ดังนั้นจึงต้อง clone จากแหล่งที่เชื่อถือได้ หรือก็คือ server ที่รู้จัก ซึ่งไม่สอดคล้องกับ P2P ที่ใช้งานได้จริงRadicle แก้ปัญหานี้ด้วยการให้ ตัวระบุ repository ที่เสถียร[0] ซึ่งตรวจสอบได้ในเครื่อง ทำให้หน่วยงานที่เราไม่จำเป็นต้องเชื่อถือสามารถเป็นผู้ให้ repository ได้
[0]: https://docs.radicle.xyz/guides/protocol#trust-through-self-...
บนมือถือ ถ้ากดปุ่มใต้ลิงก์ต้นฉบับ ก็จะเห็นแท็บ issue tracker, แท็บ pull request และอื่น ๆ
ถ้าจำไม่ผิด Gerrit เคยเก็บ code review ไว้ใน Git มาก่อน
ในเอกสารระบุว่า “สิ่งสำคัญคือต้องเผยแพร่เฉพาะรีโพซิทอรีที่คุณเป็นเจ้าของหรือเป็นผู้ดูแล และควรสื่อสารกับผู้ดูแลคนอื่นเพื่อหลีกเลี่ยงการสร้างตัวระบุรีโพซิทอรีที่ซ้ำกัน”
ผมเคยเจอคนเอาโค้ดของผมไปลงบน GitHub แล้ว และก็เห็นมาหลายครั้งว่าต่อให้ใส่ข้อความในเอกสารผลิตภัณฑ์หรือ UI ระหว่างทางว่า “ได้โปรดอย่าทำ X เพราะมันจะทำให้ผู้ใช้อื่นมีปัญหา” ก็ไม่มีใครอ่าน คิด หรือใส่ใจ แล้วทำ X ทันทีอยู่ดี ดังนั้นเลยคิดว่าคนจำนวนมากคงไม่ทำตามคำขอนี้ในเอกสาร แถมหน้าโฮมเพจก็บอกแค่วิธี push โค้ด ส่วนคำขอที่ว่า “สำคัญ” นี้กลับอยู่ในคู่มือผู้ใช้ที่แทบไม่มีใครอ่าน
สุดท้ายแล้ว การแค่ push โค้ดโอเพนซอร์สที่กำลังทำอยู่ตามคำแนะนำบนหน้าโฮมเพจ ซึ่งเป็นการกระทำที่ ดูสมเหตุสมผล อาจทำให้บางสิ่งสำคัญถูกรบกวนหรือทำให้สับสนเมื่อเวลาผ่านไปจากลักษณะของโปรโตคอลและวิธีการจัดเก็บข้อมูล ซึ่งค่อนข้างน่ากังวล
บน GitHub คุณได้ความน่าเชื่อถือเพิ่มจากจำนวนดาว และบน Radicle สิ่งที่เทียบกันได้ก็คือจำนวน seed ของรีโพซิทอรีนั้น
โดยทั่วไปในแต่ละวันคนเราจะเห็นข้อความแนะนำเป็นสิบ ๆ ข้อระหว่างใช้งานคอมพิวเตอร์ และใช้เครื่องมือเป็นสิบ ๆ ตัว ถ้าจะต้องอ่านคำแนะนำทุกอันและอ่านเอกสารของทุกเครื่องมืออย่างละเอียด เวลาที่ต้องใช้มันมากเกินไป
เพราะแบบนั้นการไม่อ่านแล้วใช้ heuristic จึงดีกว่ามาก เช่น ถ้าปิดเอกสารที่มีการแก้ไขที่ยังไม่ได้บันทึก เราก็รู้อยู่แล้วว่ากล่องโต้ตอบน่าจะถามว่า “จะทิ้งไหม?” เลยไม่จำเป็นต้องอ่าน นี่เป็นเรื่องที่ดี
สรุปคือควรออกแบบซอฟต์แวร์โดยตั้งต้นจากข้อเท็จจริงที่ว่าผู้คนมีพฤติกรรมแบบนี้ ซึ่งโดยมากก็ทำได้ ถ้ามีตัวอย่างที่เป็นรูปธรรม ก็น่าจะเสนอทางแก้ที่ดีกว่าวิธี “ขอร้องและหวังว่าคนจะอ่าน” ได้
ขอแสดงความยินดีกับการเปิดตัว ติดตามโปรเจ็กต์นี้มาสักพักแล้ว และตื่นเต้นมากที่เห็นว่ามันโตและสุกงอมขึ้นมาก อยากรู้ว่าสำหรับโปรเจ็กต์ที่ตอนนี้อยู่บน GitHub ควรย้ายอย่างไรถึงจะดีที่สุด และก็สงสัยว่ามี โหมดมิเรอร์ ให้ลองใช้ไหม
cronให้ดึงจาก GitHub ทุกชั่วโมงแล้ว push ไปยัง Radiclegit pull github mastergit push rad masterสงสัยว่าระดับ การค้นพบได้ ของรีโพซิทอรีเหล่านี้สำหรับผู้ใช้ทั่วไปจะเป็นอย่างไร https://app.radicle.xyz/robots.txt เหมือนจะไม่มี ดังนั้นน่าจะอยู่ในสถานะที่เสิร์ชเอนจินเข้ามาเก็บข้อมูลได้ และถ้าลองค้น
site:app.radicle.xyzบน Google กับ DDG ก็มีผลลัพธ์ออกมาจริงตอนนี้ยังไม่ขึ้นสูงถ้าไม่ใส่ตัวกรองไซต์ แต่อันดับอาจดีขึ้นได้
นอกจากนี้ก็น่าจะดีถ้ามีเครื่องมือสำหรับเชื่อมกับการรองรับ CI ด้วย สุดท้ายอาจเป็นแค่ลูปประมาณ
while true; do wait_repo_update; git pull && ./run_ci.sh; doneแต่ก็น่าจะต้องมีรูปแบบที่ดีกว่านี้ซึ่งจำกัดให้ทำงานเฉพาะกับ push จากตัวระบุที่เชื่อถือได้สุดท้ายยังต้องมีรีโพซิทอรีสำหรับเก็บ artifacts ด้วย แต่บางที Radicle ก็อาจไม่จำเป็นต้องแก้ทุกอย่าง โดยเฉพาะเครือข่ายแบบกระจายศูนย์ที่ใช้แชร์ไบนารีขนาดใหญ่ ดูเหมือนจะถูกนำไปใช้ในทางที่ไม่พึงประสงค์ได้ค่อนข้างเร็ว
app.radicle.xyzควรอนุญาตให้ crawler ทำดัชนีชุดรีโพซิทอรีทั้งหมดของเครือข่ายได้อยากให้ผู้คนกำหนดให้ชัดเจนว่า “P2P” หรือที่เรียกกันบ่อยกว่าว่า “distributed” จริง ๆ แล้วหมายถึงอะไร เพราะตอนนี้มันกลายเป็น คำฮิตที่คลุมเครือ มากเกินไปจนจะใช้ในความหมายอะไรก็ได้
ดังนั้นระบบ P2P ก็คือระบบที่ผู้เข้าร่วมทุกคนมี “สิทธิเท่าเทียมกันภายในเครือข่าย” และโดยทั่วไปก็มักหมายถึงทุกคนรันซอฟต์แวร์ตัวเดียวกันด้วย
[0]: https://en.wikipedia.org/wiki/Peer-to-peer
คำแนะนำการติดตั้งดันเป็น
curl -sSf [https://radicle.xyz/install](<https://radicle.xyz/install>) | shซะงั้น ความคาดหวังเลยพังทลายทันทีเพราะขยะ curl-bashวิธีติดตั้งแบบนี้เป็นสัญญาณแรงมากของการพัฒนาแบบไม่คิดหน้าคิดหลัง ถ้าโปรเจ็กต์นี้ดังขึ้นก็คงได้เห็นหายนะด้านความปลอดภัยแน่ ๆ หวังว่าสักวันจะมี “ทางเลือก GitHub แบบ P2P โอเพนซอร์ส” ที่ไม่ได้เริ่มต้นด้วยวิธีติดตั้งที่แย่ที่สุดออกมาซะที
หลายคนก็รู้กันดีอยู่แล้วว่าตัวติดตั้งแบบ pipe มีความเสี่ยง ถ้าจะใช้ตรรกะนั้น ก็ต้องเลิกใช้ Homebrew [1](GitHub ดาวมากกว่า 3.8 หมื่น), PiHole [2](4.6 หมื่นกว่า), Chef [3], RVM [4] และโปรเจ็กต์โอเพนซอร์สอีกมากมายที่ใช้ตัวติดตั้งอัตโนมัติแบบขั้นตอนเดียวผ่าน
bashการตอบสนองที่สมเหตุสมผลกว่าคือร่วมมือกับนักพัฒนาให้มีวิธีติดตั้งทางเลือกในเอกสาร หรืออธิบายความเสี่ยงให้ชัดขึ้น ไม่ใช่ทำลายทุกอย่างเพราะเรื่องเล็กน้อย
[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
เรื่องปัญหาการส่งข้อมูลถูกขัดจังหวะนั้น ตราบใดที่ในระบบไม่มีคำสั่งอันตรายที่ตรงกับ
^(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?)?)สคริปต์นี้ก็ปลอดภัยพอจัดการประเด็นนั้นแล้ว ก็ไม่แน่ใจว่ามันต่างอะไรกับการแจกแค่สคริปต์โดยไม่ให้คำสั่งรัน ถ้าอยากตรวจสอบก็โหลดสคริปต์มารันแยกเองได้ เหมือนเคยมีวิธีตรวจจับว่าสคริปต์ถูก pipe มาหรือถูกดาวน์โหลดมา แต่คงใช้ไม่ได้กับสคริปต์เล็ก ๆ แบบนี้
[0] https://files.radicle.xyz/latest/
[1] https://app.radicle.xyz/nodes/seed.radicle.garden/rad:z3gqcJ...
รู้สึกว่าได้ยินชื่อ Radicle ทุกครั้งที่ตลาดคริปโตขึ้น มีใครใช้งานมันแบบจริงจังไหม?
อันนี้โดนดาวน์โหวตทันทีเลย ฉันถามจริงจังนะ อยากรู้ว่า Radicle ใช้งบไปเท่าไร มีคนทำกี่คน และมีใครใช้อยู่บ้าง
ฉันทำงานในวงการคริปโตและก็รู้สึกแบบเดียวกัน ครั้งล่าสุดที่ได้ยินเรื่อง Radicle คือช่วงตลาดขาขึ้นรอบก่อน ส่วนช่วงขาลงกลับเงียบไป ทุกคนชอบพูดกันว่า ตลาดขาลงคือเวลาสำหรับการสร้าง และ Radicle ก็เป็นเครื่องมือสำหรับนักพัฒนาชัด ๆ เลยยิ่งดูแปลกพอสมควร
สงสัยว่ามีแผนจะรองรับกรณีใช้งานที่ให้บริการ repository เฉพาะกับชุดของโหนดบางชุดไหม น่าจะมีคนที่ไม่อยากอยู่บน GitHub แต่ก็ยังอยาก ทำงานร่วมกันแบบปิด
อย่างไรก็ตาม ตอนจัดเก็บข้อมูลมันไม่ได้ถูกเข้ารหัส จึงไม่สามารถเก็บไว้บนโหนดตัวกลางที่ไม่ได้อยู่ในชุดความเชื่อถือได้