- โปรเจกต์เว็บเบราว์เซอร์ Dillo กำลังดำเนินการ ย้ายจาก GitHub ไปยังเซิร์ฟเวอร์ที่โฮสต์ด้วยตนเอง
- เหตุผลหลักในการย้ายได้แก่ การพึ่งพา JavaScript, โครงสร้างการควบคุมแบบรวมศูนย์ และความช้าในการทำงาน ของ GitHub
- เซิร์ฟเวอร์ใหม่ใช้งานบนโดเมน dillo-browser.org โดยใช้ Git frontend ขนาดเบาที่สร้างจาก cgit และระบบติดตามบั๊กที่พัฒนาขึ้นเองชื่อ “buggy”
- ข้อมูลทั้งหมดถูกจัดการเป็น ที่เก็บ git และทำการ mirror ไปยัง Codeberg และ Sourcehut เพื่อ ลดความเสี่ยงการสูญหายข้อมูลให้น้อยที่สุด
- โครงสร้างนี้ถูกออกแบบด้วย ลายเซ็น OpenPGP เพื่อยังคงความน่าเชื่อถือได้แม้กรณี DNS สูญหาย และเสริม ความเป็นอิสระและความยั่งยืนของโครงการ
ภาพรวม
- เว็บไซต์ต้นฉบับของ Dillo คือ dillo.org ซึ่งประกอบด้วยที่เก็บ Mercurial, เซิร์ฟเวอร์อีเมล, ระบบติดตามบั๊ก และคลังเก็บ mailing list
- ในปี 2022 โดเมนเดิมหายไป และมีบุคคลที่สามตั้งเว็บไซต์เลียนแบบที่เต็มไปด้วยโฆษณา AI
- ข้อมูลบางส่วนถูกกู้คืนแล้ว แต่ยังไม่สมบูรณ์
- จากประสบการณ์ดังกล่าว ทีมตัดสินใจเลี่ยงการพึ่งพาเว็บไซต์เพียงแห่งเดียว และสร้างโครงสร้างสำรองแบบกระจาย
- ตอนแรกได้อัปโหลดโค้ดขึ้น GitHub แต่ต่อมาเห็นว่าไม่เหมาะสมในระยะยาว
ข้อจำกัดของ GitHub
- GitHub มีประโยชน์สำหรับ workflow CI และการจัดการที่เก็บโค้ด แต่ยังมี ข้อจำกัดหลายด้าน
- หน้าแสดงผลด้านหน้าไม่ทำงานหากไม่มี JavaScript ทำให้ไม่สามารถดู Issue หรือ PR ด้วยเบราว์เซอร์ Dillo ได้
- หน้าเว็บใช้ ทรัพยากรมากเกินไป และเกิดภาระส่วนเกินแม้เป็นการเรนเดอร์ HTML แบบธรรมดา
- มีความเสี่ยงที่บัญชีจะถูกบล็อกจาก เจ้าของการควบคุมจุดเดียว ทำให้การเข้าถึงข้อมูลถูกตัดขาดได้
- แพลตฟอร์มค่อยๆ ช้าลง และต้องการการเชื่อมต่ออินเทอร์เน็ตที่เร็วขึ้น
- วิธีแจ้งเตือนแบบ “push model” ของ GitHub ไม่เหมาะกับแนวทางการพัฒนาที่เน้นการทำงานแบบออฟไลน์
- ขาดเครื่องมือจัดการชุมชนในโครงการที่มีผู้ใช้ไม่ใช่นักพัฒนาเป็นสัดส่วนสูง ทำให้เหนื่อยล้าของนักพัฒนาสูงขึ้น
- เมื่อ GitHub หันมาเน้น LLM และ Generative AI มากขึ้น เว็บไซต์ต่างๆ จึงเสริมการป้องกัน LLM crawler โดยเพิ่ม JavaScript wall หรือติดตาม browser fingerprinting
- ส่งผลให้เกิดผลข้างเคียงคือผู้ใช้ Dillo ถูกปิดกั้นการเข้าถึง
การตั้งระบบโฮสต์เอง
- บริการเก็บโค้ดที่มีอยู่ไม่สามารถตอบโจทย์ทั้งการขจัดจุดล้มเหลวเดียวและการรันระบบที่ประหยัดน้ำหนักพร้อมกันได้
- ดังนั้นจึงตัดสินใจ รันเซิร์ฟเวอร์เองและรักษา mirror หลายแห่ง
- ซื้อโดเมน dillo-browser.org และสร้าง เซิร์ฟเวอร์ VPS ขนาดเล็ก
- ระบบกำลังทำงานได้เสถียรกว่าที่คาดหวัง และรับภาระทราฟฟิกจาก AI bots เป็นหลัก
- เลือกใช้ cgit เป็น Git frontend
- พัฒนาในภาษา C จึงใช้ RAM และ CPU ต่ำ และทำงานได้ โดยไม่ต้องใช้ JavaScript
- ปรับ CSS บางส่วนเพื่อให้ดูดีบน Dillo
- เข้าถึงได้ที่ https://git.dillo-browser.org/
- ใช้ระบบติดตามบั๊กที่พัฒนาขึ้นเองชื่อ ‘buggy’
- แยกวิเคราะห์ไฟล์ Markdown เพื่อสร้างหน้า HTML และเก็บบั๊กแต่ละรายการไว้ใน ที่เก็บ git
- เมื่อมีการ commit git hook จะอัปเดตหน้าต่าง ๆ โดยอัตโนมัติ
- รองรับการแก้ไขแบบออฟไลน์ และไม่ก่อให้เกิดความเสี่ยงด้านความปลอดภัย
- ดูได้ที่ https://bug.dillo-browser.org/
- อาร์ไคฟ์ mailing list ถูกกระจายเก็บบน บริการภายนอก 3 แห่ง และมีแผนเพิ่มสำเนาของตัวเองในอนาคต
การกำหนดค่า mirror
- ข้อมูลสำคัญทั้งหมดถูกจัดการในรูปแบบ ที่เก็บ git และทำ mirror ไปยัง Codeberg และ Sourcehut
- หากที่เก็บโค้ดใดที่หนึ่งหยุดให้บริการก็สามารถย้ายไปยัง mirror อื่นได้ด้วย ต้นทุนการย้ายที่ต่ำ
- จุดล้มเหลวเดียวที่เหลือคือ DNS (dillo-browser.org)
- หากสูญเสีย DNS ได้ มีช่องทางแจ้งผู้ใช้ผ่าน mailing list, Fediverse, IRC และอื่นๆ
- ข้อมูลถูกคัดลอกใน git จึง ไม่เกิดการสูญเสียรุนแรง
ลายเซ็น OpenPGP
- หน้าปัจจุบันถูกเซ็นด้วย คีย์ GPG ของ Rodrigo Arias Mallo (32E65EC501A1B6FDF8190D293EE6BA977EB2A253)
- เป็นคีย์เดียวกับ release ล่าสุดของ Dillo และลงทะเบียนในบัญชี GitHub แล้ว
- ไฟล์ลายเซ็น (index.html.asc) ถูกเชื่อมผ่าน
<link rel=signature>
- ลายเซ็น OpenPGP ทำให้ความน่าเชื่อถือยังคงอยู่แม้ DNS จะหาย
- แทนการพิสูจน์สิทธิ์ผ่าน ห่วงโซ่ใบรับรอง TLS ด้วยการยืนยันผ่าน ความเชื่อถือจากลายเซ็น
- ใส่ลายเซ็นในทุก git mirror เพื่อเพิ่ม ความทนทานต่อการสูญเสียข้อมูล
ความคืบหน้าและอนาคตของการย้าย
- ที่เก็บของ GitHub ไม่ถูกลบทันที และจะยังคงอัปเดตต่อเนื่องจนกว่าย้ายเสร็จสมบูรณ์
- เมื่อเสร็จแล้วจะเปลี่ยนสถานะที่เก็บเป็น ‘archived’ และแจ้งบนเว็บไซต์ทางการ
- คอมมิตต์และไฟล์ release เดิมถูกเก็บไว้เพื่อ ความเข้ากันได้ของ build ย้อนหลัง
- โครงสร้างพื้นฐานใหม่สามารถดำเนินการได้แบบอิสระด้วย ต้นทุนและการใช้พลังงานที่ต่ำ
- โดยอิงจากเงินบริจาคและค่าใช้จ่ายเซิร์ฟเวอร์ปัจจุบัน คาดว่าจะคงไว้ได้อย่างน้อย 3 ปี
- หากต้องการสนับสนุน สามารถสนับสนุนผ่าน Liberapay (https://liberapay.com/dillo/)
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
ตลอดหลายปีที่ผ่านมาใช้ GitLab เป็นทางเลือกแบบ self-hosted มาตลอด ชอบนะ แต่กินทรัพยากรหนัก
ช่วงนี้กำลังทดสอบ Forgejo ที่ทีม Codeberg ทำขึ้นมา แล้วมันยอดเยี่ยมมาก
ความต่างที่ใหญ่ที่สุดคือการใช้หน่วยความจำ GitLab สร้างบน Ruby on Rails เลยมีหลาย service รันพร้อมกัน แต่ Forgejo เป็นโครงสร้างแบบ single binary ที่เขียนด้วย Go
GitLab ค่อย ๆ กินหน่วยความจำของ VM 16GB จนหมด แต่ Forgejo ใช้แค่ราว 300MB แม้จะรันทั้ง server และ runner พร้อมกัน
ไม่มี GraphQL แต่ REST API ก็ดูดีเพียงพอ
ยังไม่ค่อยเข้าใจความต่างระหว่าง gitea กับ forgejo แต่ดูจากเอกสารเปรียบเทียบของ Forgejo เหมือนว่าจะเป็น soft fork ที่เกิดจากปัญหาเรื่อง governance ในปี 2022
ด้วยความที่เป็นโครงสร้างเรียบง่ายบน Go เลยดูแลง่ายและต้นทุนต่ำมาก เรายังสร้างเครื่องมือภายในบน Forgejo โดยตรงด้วย
เพราะโฮสต์แบบ on-premises ต่อให้อินเทอร์เน็ตล่ม งานพัฒนาและ CI ก็ไม่หยุด รองรับ package manager cache ด้วยเลยจัดการ dependency ได้ง่าย
มันมีdowntime น้อยกว่า GitHub 10 เท่า และส่วนใหญ่ก็เป็นการบำรุงรักษาตามแผน
เวลาเห็นคนเขียนว่า GitHub มี availability ดีกว่าแล้วก็อดขำไม่ได้
ตอนสร้าง repository ใหม่ก็จบด้วย
git init --barebackup ก็ทำงานอัตโนมัติอยู่แล้ว
ถ้าพัฒนาคนเดียวก็รู้สึกว่าไม่ได้จำเป็นต้องมี UI
ผมคิดว่า CI แบบ GitLab ดีกว่า GitHub Actions มาก GitHub กลายเป็นมาตรฐานเพราะความนิยม แต่การออกแบบยังน่าเสียดาย
แค่มี shared filesystem ก็ขยายระบบและทำ backup ได้ง่าย
ผมดูแลชมรมคณิตศาสตร์ในท้องถิ่น และใช้ Forgejo ให้เด็ก ๆ ส่งการบ้าน LaTeX และ Python
มันจัดการล็อกอินและรีเซ็ตรหัสผ่านง่าย เลยมีประโยชน์มากสำหรับงานด้านการศึกษา
เห็นด้วยกับความเห็นที่ว่าไม่ชอบโมเดลการแจ้งเตือนแบบ pushของ GitHub เพราะอยากเห็นอัปเดตก็ต่อเมื่อเข้าไปเช็กเอง
ถ้าใช้การกรองอีเมล ก็เปลี่ยนการแจ้งเตือนแบบ push ให้กลายเป็นโมเดลแบบ pullได้ เอาแจ้งเตือนไปรวมไว้ในโฟลเดอร์เฉพาะแล้วค่อยเปิดดูตอนต้องการ
เรื่องของคนที่สร้าง**bug tracker ง่าย ๆ ชื่อ ‘buggy’**ขึ้นมาเองน่าสนใจดี เขาบอกว่าเป็นเครื่องมือ C ที่ parse Markdown แล้วสร้างหน้า HTML
จิตวิญญาณแฮ็กเกอร์ยังมีชีวิตอยู่
มีคนถามถึงความต่างระหว่าง “โมเดล push” กับ “โมเดล pull”
ผมคิดว่าตอนนี้เราอยู่ในช่วงdiasporaของทางเลือกแทน GitHub ที่ผุดขึ้นมาหลายเจ้า
ภายในไม่กี่เดือนอาจเริ่มตกผลึกจนเหลือกระแสหลักเพียงรายเดียวก็ได้ ถ้ามีบริษัทหรือบุคคลชื่อดังเปิดแพลตฟอร์มใหม่ ก็อาจครองตลาดได้เหมือนกัน
โปรเจกต์ที่ย้ายออกจาก GitHub ยังมีน้อยมาก ผมเลยคิดว่ายังเร็วเกินไป
ตรงกันข้าม ตอนนี้กำลังเกิดre-decentralizationมากกว่า เป็นยุคที่แต่ละคนเลือก forge ให้เหมาะกับการควบคุม เขตอำนาจ และ workflow ของตัวเอง
อยากชวนโปรเจกต์ Dillo มาที่ Tangled → tangled.org
ผมคิดว่าปัญหาใหญ่สุดคือประสบการณ์ใช้งานของ GitHub ที่ช้าลง
เรื่องดูโค้ดแก้ด้วย github.dev ได้ แต่ PR กับ Actions ยังช้าและอืดมาก
ถ้าอยากติดตั้ง Forgejo บน VM ผมทำสคริปต์ไว้ให้เซ็ตทั้ง server และ runner ได้ในทีเดียว → easyforgejo
ผมไม่ได้เชี่ยวชาญเรื่องนี้ แต่ก็อ่านอย่างสนใจ
น่าแปลกใจที่แค่การตั้งระบบควบคุมเวอร์ชันตัวหนึ่งกลับมีองค์ประกอบให้คิดเยอะขนาดนี้
ผมใช้ Fossil อยู่ และสำหรับองค์กรเล็ก ๆ ที่คนเดียวต้องเป็นทั้งนักพัฒนา ผู้ดูแลระบบ และฝ่ายซัพพอร์ต มันง่ายกว่ามาก
ข้อจำกัดของ deploy key บน GitHub ก็ทำให้ลำบากเหมือนกัน เวลาต้องดูแลหลายแอปและหลายเซิร์ฟเวอร์ ต้องตั้งคีย์แยกกันทีละตัว มันยุ่งยาก