atproto ไม่มีอินสแตนซ์
(overreacted.io)- คำถามที่ถามหา “อินสแตนซ์ของ Bluesky” คือการนำ โมเดลอินสแตนซ์ ของ Mastodon มาครอบ atproto ตรงๆ ทั้งที่ atproto ถูกออกแบบมาให้แยกส่วนระหว่างการโฮสต์กับการรวมข้อมูลของแอป
- คล้ายกับ RSS และ Google Reader ข้อมูลไม่ได้ถูกขังอยู่ในแอป แต่เก็บอยู่ใน ที่เก็บข้อมูลที่โฮสต์ไว้ และหลายแอปสามารถดึงข้อมูลนั้นไปแสดงผลได้
- อินสแตนซ์ของ Mastodon เป็นโครงสร้างที่รวมการโฮสต์ แอป อัตลักษณ์ และความสัมพันธ์แบบสหพันธ์ไว้ในกล่องเดียว ทำให้การตัดสินใจของแอดมินหรือปัญหาล่มของอินสแตนซ์ส่งผลต่อประสบการณ์ผู้ใช้โดยตรง
- ใน atproto ผู้ใช้สามารถย้ายโฮสต์ ลองใช้หรือสร้างแอปใหม่ได้ และแอปอย่าง Tangled, Semble, Sidetrail ก็ทำงานแยกจาก Bluesky
- ถ้าจะดูความกระจายศูนย์ของ atproto ควรมองที่ การย้ายไปใช้โฮสต์ทางเลือก และ ระบบนิเวศของแอปใหม่ ว่าทำงานได้จริงหรือไม่ มากกว่าจะดู “จำนวนอินสแตนซ์ของ Bluesky”
โมเดลที่ใกล้กับ RSS และ Google Reader
- ในยุค RSS ผู้ใช้โพสต์บทความลงบล็อกของตัวเอง และแอปอย่าง Google Reader หรือ Feedly จะทำหน้าที่ รวบรวม บทความจากหลายบล็อก
- บทความไม่ได้ “อยู่” ใน Google Reader แต่ยังคงอยู่บนบล็อกหรือที่โฮสต์ของแต่ละคน
- หัวใจสำคัญคือ การแยกระหว่างการโฮสต์กับการรวมข้อมูล
- การโฮสต์คือที่ที่คอนเทนต์จริงอยู่
- แอปรวบรวมข้อมูลมีลักษณะใกล้เคียงกับการฉายภาพ (projection) ของคอนเทนต์จากหลายแหล่ง
โซเชียลมีเดียแบบรวมศูนย์และคำตอบของ Mastodon
- โซเชียลมีเดียแบบดั้งเดิมทำงานโดยรวบผู้ใช้ทั้งหมดไว้ในแอปและพื้นที่เดียว
- โครงสร้างแบบนี้ทำให้เกิดการรวมศูนย์และ network effect ที่รุนแรง และการถกเถียงเรื่องโซเชียลเน็ตเวิร์กแบบกระจายศูนย์ก็เริ่มจากคำถามว่าจะกระจายปัญหานี้อย่างไร
- แนวทางแบบ Mastodon คือให้แต่ละชุมชนดูแล “Facebook ขนาดเล็ก” หรือ “Twitter ขนาดเล็ก” ของตัวเอง และกล่องนั้นก็คือ อินสแตนซ์
สิ่งที่อินสแตนซ์ของ Mastodon ผูกไว้ด้วยกัน
- ผู้ใช้จะสังกัดอยู่ “ภายใน” อินสแตนซ์ใดอินสแตนซ์หนึ่ง
- เหตุผลที่รูปแบบล็อกอินของ Mastodon เป็น
[email protected]ก็เพราะอัตลักษณ์มีอินสแตนซ์เป็นส่วนหนึ่ง - ผู้ใช้ไม่ได้เป็น “Alice” แบบนามธรรม แต่เป็น “Alice ของ instance #1”
- เหตุผลที่รูปแบบล็อกอินของ Mastodon เป็น
- ถ้าผู้ใช้จากคนละอินสแตนซ์จะสื่อสารกัน อินสแตนซ์ต้องรับส่งข้อความถึงกัน
- ถ้า Alice อยู่บน instance #1 และ Bree อยู่บน instance #2 เมื่อ Alice ติดตาม Bree โพสต์ของ Bree จะถูกส่งมายัง instance #1
- ความสัมพันธ์ในการส่งต่อแบบนี้คือ สหพันธ์ (federation)
- เพราะการโฮสต์กับแอปถูกมัดรวมกัน ผู้ใช้จึงพึ่งพาอินสแตนซ์อย่างมาก
ข้อจำกัดที่เกิดจากการผูกกับอินสแตนซ์
- หากแอดมินของอินสแตนซ์มีความขัดแย้งกัน พวกเขาอาจ หยุดสหพันธ์ ระหว่างกันได้
- เมื่อเป็นแบบนั้น ผู้ใช้อาจไม่สามารถเห็นโพสต์ของเพื่อนได้อีก
- ถ้าอินสแตนซ์ของผู้ใช้ล่ม อัตลักษณ์ที่ผูกกับอินสแตนซ์นั้นก็หายไปด้วย
- เพราะผู้ติดตามกำลังติดตาม “ผู้ใช้ของอินสแตนซ์นั้น”
- ลูกศรการเชื่อมต่อระหว่างอินสแตนซ์เพิ่มขึ้นแบบ O(n²)
- ตอนนี้อาจยังไม่ใช่ปัญหาใหญ่ แต่หากโซเชียลเน็ตเวิร์กแนวนี้ได้รับความนิยม ก็อาจกลายเป็นประเด็นสำคัญ
ความแตกต่างหลักของ atproto
- atproto ไม่ได้ตั้งอยู่บนแนวคิดอินสแตนซ์แบบ Mastodon แต่ย้อนกลับไปสู่โมเดลแบบ RSS และ Google Reader
- ในระดับเครือข่าย มันแยก การโฮสต์กับการรวมข้อมูล ออกจากกัน
- ข้อมูลอยู่ที่โฮสต์
- แอปทำหน้าที่รวบรวมข้อมูลจากโฮสต์ของผู้คนจำนวนมาก
- ดังนั้น atproto จึงไม่มีอินสแตนซ์
- โฮสต์สามารถเปลี่ยนได้
- แอปสามารถรวมข้อมูลจากหลายโฮสต์ได้
- โครงสร้างนี้ให้ภาพของความกระจายศูนย์ที่หลากหลายกว่าการ “รันแอปเดียวกันหลายสำเนา”
การกระจายศูนย์ที่ผู้ใช้ทำได้เอง
- ผู้ใช้สามารถ เปลี่ยนโฮสต์ ได้
- ผู้เขียนระบุว่าได้ย้ายข้อมูล atproto ของตัวเองไปที่ Eurosky และกระบวนการเป็นอัตโนมัติโดยมาก ยกเว้นปัญหา UX บางส่วน
- หากต้องการลงมือมากกว่านั้น ก็สามารถ โฮสต์เองฟรีบน Cloudflare ได้
- ยังสามารถลองใช้แอปใหม่หรือสร้างเองได้ด้วย
- Tangled และ Semble เป็นตัวอย่างของแอป atproto ที่ไม่เกี่ยวกับ Bluesky
- ผู้เขียนสร้างแอปชื่อ Sidetrail และแอปนี้เป็น โอเพนซอร์ส
- atproto ยังมี บทแนะนำ Statusphere สำหรับการสร้างแอปด้วย
ทำไม “จำนวนอินสแตนซ์ของ Bluesky” ถึงชี้ผิดจุด
- ใน Mastodon การวัดความกระจายศูนย์ด้วยจำนวนอินสแตนซ์เป็นเรื่องธรรมชาติ
- เพราะวิธีกระจายศูนย์หลักของ Mastodon คือการรันกล่องที่รวมทั้งโฮสต์และแอปให้มากขึ้น และทำให้กล่องเหล่านั้นคุยกันได้
- แต่ใน atproto ทุกแอปมีลักษณะใกล้เคียงกับ การฉายภาพ ของ Atmosphere ทั้งหมด
- โครงสร้างนี้คล้ายกับที่ Feedly และ Google Reader แสดงภาพของ Blogosphere ทั้งหมด
- การรันสำเนาเต็มของเซิร์ฟเวอร์ฐานข้อมูล Bluesky หลายชุดนั้นทำได้ แต่โดยทั่วไปก็ไม่ได้มีประโยชน์ไปกว่าการรันสำเนา Google Reader หลายชุด
- สำเนาบางชุดมีไว้เพื่อตอบโจทย์เฉพาะทาง
- Blacksky เป็นตัวอย่างสำหรับความต้องการเฉพาะ เช่น ปรัชญาการกลั่นกรองที่ต่างออกไป
- ไคลเอนต์ reddwarf.app ใช้ constellation ซึ่งเป็นแคชฟรีที่ชุมชนดูแล โดยไม่มีฐานข้อมูลเฉพาะของตัวเอง
- มีการระบุว่าโครงสร้างพื้นฐานเครือข่ายแบบใช้ร่วมกันอย่าง Relay ถูก รันด้วยต้นทุนต่ำ มาตลอด 1 ปี
เกณฑ์ที่ควรใช้ดูใน atproto
- หากจะวัดความกระจายศูนย์ของ atproto ไม่ควรดูที่ “จำนวนอินสแตนซ์ของ Bluesky” แต่ควรดูว่า
- ผู้คนกำลังย้ายไปใช้ โฮสต์ทางเลือก หรือไม่
- ผู้คนกำลังสร้างและใช้งาน แอปใหม่ หรือไม่
- การแยกโฮสต์ออกจากแอปช่วยแก้แรงจูงใจที่บิดเบี้ยวได้ทั้งในโซเชียลแบบปิดและโซเชียลแบบสหพันธ์
- หัวใจของ atproto คือการเก็บข้อมูลของผู้ใช้นอกตัวแอป และให้แอปมารวบรวมข้อมูลบนชั้นนั้น
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ดูเหมือนจงใจตีความคำถามว่า “Bluesky instance อยู่ที่ไหน” แบบผิดๆ เพื่อยก ATProto ขึ้นและกด ActivityPub ลง
แบบนี้ทำให้ข้อเท็จจริงทางเทคนิคที่น่าสนใจ เช่น relay ของ ATProto กับข้อดีข้อเสียของมัน หรือการย้ายบัญชีของ ActivityPub กับข้อดีข้อเสียของมัน ถูกละเลยหรือบิดเบือน และสร้างความขัดแย้งที่ไม่จำเป็นระหว่างสองแพลตฟอร์มที่กำลังแก้ปัญหาคล้ายกัน
คนจำนวนหนึ่งอาจใช้คำว่า “instance” ในความหมายทั่วไปอย่างเซิร์ฟเวอร์ ซอฟต์แวร์ที่กำลังรันอยู่ virtual machine หรือ container ก็ได้ เลยไม่เข้าใจว่าทำไมต้องตีความแบบแนวคิดของ Mastodon เท่านั้น
ไดอะแกรมกับคำอธิบายทำได้ดี แต่การเหน็บ ActivityPub แบบแผ่วๆ ทำให้น่าเสียดาย เพราะให้ความรู้สึกว่ามาจากความเป็นปฏิปักษ์มากกว่าการสื่อข้อมูล
พอเทียบกับคำถามว่า “Google Reader instance อยู่ที่ไหน” ก็จะเห็นชัดว่าคำถามนั้นฟังดูแปลกแค่ไหน และผมคิดว่าภาพสองภาพท้ายบทความอธิบายประเด็นที่มักตกหล่นในการคุยเรื่อง atproto/ActivityPub ช่วงแรกๆ ได้ค่อนข้างดี
เหตุผลที่ไม่ได้ใส่ relay ไว้เขียนไว้ที่นี่: https://news.ycombinator.com/item?id=48600963
relay ไม่ได้เป็นแก่นหลักของโมเดลเท่าไรนัก แต่ใกล้เคียงกับการปรับแต่งประสิทธิภาพมากกว่า ดังนั้นในบทความจึงอยากโฟกัสที่ตัวโมเดลเอง
เมื่อคำคำหนึ่งเริ่มผูกกับแนวคิดและโครงสร้างเฉพาะ พอเห็นคำว่า “โซเชียลมีเดียแบบกระจายศูนย์” คนจำนวนมากก็จะนึกถึงโครงสร้าง federation แบบ ActivityPub และเมื่อเห็น ATProto ก็จะถามว่า “ทำไมถึงมี Bluesky instance ที่คนสมัครเข้าใช้อยู่แค่ที่เดียว?”
ถึงจะไม่ใช่มุมมองใหม่ทั้งหมด แต่สำหรับคนที่มีภาพจำเดิมฝังอยู่แล้ว มันก็ดูเป็นบทความที่มีประโยชน์พอจะกลับมาแปะลิงก์ให้อ่านกันภายหลังได้
แทนที่จะเถียงกันเรื่องกฤษฎีกา “filioque” ก็กลายเป็นมีบล็อกโพสต์จากสองฝ่ายที่พูดกันคนละเรื่องเรื่องนิยามของ “federation”
โมเดล Fediverse เข้าใจได้ง่ายจากมุมมองของโซเชียลเน็ตเวิร์กแบบเดิม แต่ ATProto เป็นแนวคิดใหม่ที่พยายามให้ อธิปไตยข้อมูล แก่ผู้ใช้ ขณะเดียวกันก็ได้ความสามารถในการขยายระบบแบบโซเชียลเน็ตเวิร์กศูนย์กลาง
สำหรับผม อุปมาที่ใช้นี่มันพัง
RSS ไม่ได้พึ่ง Google Reader เลย และแม้ในยุครุ่งเรืองก็ยังพึ่งพาน้อยกว่าที่อีเมลทุกวันนี้พึ่ง Gmail เสียอีก
ใน ATProto นั้น AppView ต้องพึ่ง relay มากพอสมควรถึงจะมีประโยชน์ขึ้นมาได้ และต้นทุนในการรัน relay ก็ไม่น้อยเหมือนกัน
อีกอย่าง วงกลมสีเหลืองในภาพ RSS หมายถึงบล็อก แต่วงกลมที่หมายถึงโพสต์บน Facebook เป็นคนละลักษณะกัน บล็อกนั้นเป็นอิสระได้ด้วยตัวเอง
ไม่ได้หมายความว่า ATProto แย่ แต่บทความนี้ให้ความรู้สึกว่าทำให้สับสนมากกว่าทำให้ชัดเจน
เมื่อก่อนมันแพงกว่าเล็กน้อยเพราะต้องเก็บทราฟฟิกทั้งหมดไว้ แต่ใน sync 1.1 ส่วนนั้นถูกเอาออกไปแล้ว และตอนนี้ก็รันได้ค่อนข้างสบายบน virtual machine ราคา 20 ดอลลาร์ต่อเดือน
สิ่งที่แพงและยากจริงๆ ไม่ว่าจะรวมศูนย์หรือกระจายศูนย์ก็คือ moderation
ผู้เขียนบทความนี้เคยพูดถึงความเข้าใจผิดที่พบบ่อยเกี่ยวกับ relay ไว้เมื่อ 9 เดือนก่อน: https://news.ycombinator.com/item?id=45077291#45078223
ในมุมผม relay คือกาวที่ทำให้ ATProto ทำงานได้ดีในแง่ประสิทธิภาพ
มันขนส่งข้อมูลโดยไม่สนใจตัวเนื้อหา และดูเหมือนทำหน้าที่ลดจำนวนบริการที่แต่ละ AppView จำเป็นต้องรู้จัก
อย่างที่บทความบอกไว้ จุดปรับปรุงใหญ่เมื่อเทียบกับ Mastodon คือ relay, AppView และ PDS เป็นบริการแยกกันที่มีความต้องการด้านการขยายระบบต่างกัน และนี่เป็นวิธีแก้ปัญหาเชิงออกแบบระบบที่ค่อนข้างงดงาม
[1] https://atproto.com/guides/glossary
แต่มันเป็นการปรับแต่งที่มองไม่เห็น และยังมีกลยุทธ์อื่นอีก ดังนั้นในบทความจึงละไว้เกือบทั้งหมด
ตัวอย่างเช่น ปัจจุบันแอปเล็กๆ หลายตัวไม่ได้สร้างดัชนีฐานข้อมูลของตัวเอง แต่พึ่งพา Constellation(https://constellation.microcosm.blue/) จึงไม่ได้ใช้ relay เลย
เขาอ้างว่าจะลบเฉพาะคอนเทนต์ที่การโฮสต์จะผิดกฎหมาย แต่ผมไม่แน่ใจว่าจริงแค่ไหน และก็มีความเสี่ยงเสมอว่ามันจะเปลี่ยนไปในอนาคต
https://docs.bsky.app/blog/blueskys-moderation-architecture#...
การอธิบายความแตกต่างของสองแนวทางทำได้ดี
แต่ก็น่าอึดอัดตรงที่ไม่ได้ตอบคำถามว่า “แล้ว ATProto แก้ปัญหาที่อินสแตนซ์ถูกสร้างมาเพื่อแก้อย่างไร”
ตัวอย่างเช่น ถ้ามองว่า defederation เป็นแค่เหตุผลกำกวมบางอย่างที่ทำให้มองไม่เห็นโพสต์ของเพื่อน ก็จะตอบไม่ได้ว่า “งั้น atproto แก้ปัญหาที่ defederation แก้อย่างไร”
คำตอบพื้นฐานที่ตามมาจากกรอบนี้ตามธรรมชาติก็คือ “มันไม่ได้แก้”
ในระดับโฮสติ้ง ผู้ให้บริการโฮสต์อาจระงับบัญชีได้เพราะเนื้อหาที่ผิดกฎหมายอย่างชัดเจน เหมือนที่ blogspot.com หรือ Cloudflare บล็อกบางกรณี
ในระดับแอป ผู้ดูแลแอปและโมเดอเรเตอร์จะจัดการคอนเทนต์ที่ผู้ใช้สร้างขึ้นเหมือนเว็บเซอร์วิสอื่น ๆ
เป็นเรื่องที่นักพัฒนาแอปเลือกเอง จะมีองค์ประกอบพื้นฐานสำหรับ moderation ในพื้นที่ของผู้ใช้แบบ Reddit หรือจะเสียบบริการ moderation แยกต่างหากแบบ Bluesky ก็ได้
เพราะไม่มีสิ่งที่เทียบได้กับ “community instance” ที่จะมาทะเลาะกันเอง จึงไม่มี defederation ด้วย มีแค่โฮสติ้ง แอป และ moderation ระดับแอปตามทางเลือกของนักพัฒนาแอปเท่านั้น
โดยเนื้อแท้แล้วมันคล้ายกับสิ่งที่ Microsoft ทำกับอีเมลมาก กล่าวคือทิ้งข้อความจากผู้ให้บริการที่ไม่ใช่รายใหญ่ และทำให้การจะส่งข้อความถึงกันได้ในระบบที่ federate กันนั้น ผู้ใช้ต้องพึ่ง Microsoft หรือผู้เล่นรายใหญ่เดิมรายอื่น
ผลคืออินสแตนซ์ใหม่ส่งข้อความไม่ได้และหาผู้ใช้ไม่ได้ ผู้เล่นรายใหญ่เดิมจึงมีแรงจูงใจที่บิดเบี้ยวในการไม่ federate กับอินสแตนซ์ใหม่
การเลือกสถาปัตยกรรมแบบนี้มีผลทำให้ การกระจุกตัวแบบผู้เล่นน้อยราย แข็งตัวขึ้นในระยะยาว
แม้จะอ้างว่าจำเป็นต่อการกันสแปม แต่ก็มีผู้ให้บริการที่ไม่ทำแบบนั้น ทั้งที่ถ้าตั้งค่า DKIM, reverse DNS ฯลฯ ให้ถูกต้อง ก็มักส่งถึง Gmail ได้ตามปกติ และพวกเขาก็ไม่ได้เจอปัญหาสแปมมากกว่า
ทางเลือกที่ชัดเจนคือให้ไคลเอนต์เป็นฝ่ายกรอง ผู้ให้รายการตัวกรองที่มีลักษณะคล้าย uBlock จะเป็นผู้ส่งมอบตัวกรอง แทนที่จะเป็นผู้ดำเนินการแบบ Microsoft และเพราะพวกเขาไม่ได้รันอินสแตนซ์ใดโดยเฉพาะ จึงไม่มีแรงจูงใจจะต้อนทุกคนเข้าไปอยู่ในอินสแตนซ์ของตัวเอง
เว้นแต่จะมีจักรวาลทางเลือกที่มี AppView จำนวนมากพอซึ่งบริโภค firehose ทั้งหมดได้ เลือกใช้สลับกันได้อย่างอิสระ และรันเองได้ในต้นทุนต่ำ
ATProto ใกล้เคียงกับ RSS ในโลกที่คุณอ่าน RSS ได้ผ่าน Google Reader หรือบริการโคลนขนาดใกล้เคียงเท่านั้น โดยไม่มี RSS reader บนเดสก์ท็อปหรือมือถือ
ถ้ามันร้องก๊าบเหมือนเป็ด มันก็คือเป็ด
บัญชีหนึ่งมี PDS เดียว และ DID จะชี้ไปยัง PDS ซึ่งเป็นทั้งฟีดข้อมูลอย่างเป็นทางการของผู้ใช้และปลายทางสำหรับการเขียนข้อมูล
ข้อมูลอาจถูกทำสำเนาได้ แต่ PDS ถูกถือเป็นต้นฉบับ
สิ่งนี้ใกล้กับสถาปัตยกรรมแบบไคลเอนต์/เซิร์ฟเวอร์มากกว่าสถาปัตยกรรมแบบกระจายอย่างชัดเจน
ไม่มีฐานข้อมูลแบบ P2P และไม่ได้เขียนลง DHT หรือเพียร์ด้วย เขียนลง PDS แล้วการเขียนนั้นจึงค่อยถูกมิเรอร์แบบเลือกได้
การค้นพบก็ทำผ่าน DNS จึงไม่ได้ถามข้อมูลจากเพียร์
การเชื่อมต่อกับ relay ก็ไม่ใช่เชื่อมต่อหาเพียร์ แต่เป็นไคลเอนต์ที่ขอสำเนาข้อมูลซึ่งถูกโฮสต์เป็นต้นฉบับอยู่บน PDS
ผมไม่คิดว่าการเรียก PDS ว่าอินสแตนซ์ และเรียก relay ว่ามิเรอร์ จะเป็นการฝืนเกินไป
เพียงแต่ต่างจากความหมายที่คนพูดถึง Mastodon มักหมายถึงเวลาใช้คำว่า “อินสแตนซ์”
ใน Mastodon อินสแตนซ์คือ ชุดที่แยกจากกันไม่ได้ ของการโฮสต์ข้อมูล แอป ชุมชน และ moderation
ผมเข้าใจว่า ATproto ยอมสละความกระจายศูนย์ที่แท้จริงเพื่อความสม่ำเสมอ ส่วน Mastodon และ ActivityPub ยอมสละความสม่ำเสมอที่แท้จริงเพื่อความกระจายศูนย์ที่เข้าถึงได้มากกว่า
เพราะการรันโหนด ActivityPub เข้าถึงได้ง่ายกว่ามากสำหรับผู้ใช้โฮสต์เองทั่วไป เมื่อเทียบกับการรัน content relay ของ AT
สิ่งที่ "กระจายศูนย์" ได้ใน AT ท้ายที่สุดก็คือข้อมูลของตัวเองเท่านั้น และมันใกล้เคียงกับการ เป็นเจ้าของข้อมูลของตัวเอง มากกว่าการเป็นเจ้าของส่วนหนึ่งของเครือข่ายร่วมกัน
นี่ก็เป็นประเด็นที่พูดซ้ำกันมาหลายรอบแล้วใน HN
ใน ActivityPub การรันอินสแตนซ์หมายถึงต้องรับผิดชอบทั้งข้อมูล แอปพลิเคชัน และปัญหาการขยายตัวต่อจากนั้นทั้งหมด ดังนั้นคุณต้องเลือกระหว่างรับภาระการดูแลเอง หรือผูกติดกับอินสแตนซ์ของคนอื่น
ต่อให้คุณไม่ชอบอินสแตนซ์ที่เลือกและอยากย้าย ถ้ายังไม่มีการเปลี่ยนแปลงนั้น คุณก็แทบต้องเริ่มใหม่เกือบทั้งหมด
ใน AtProto การย้ายไปยังแพลตฟอร์มแอปพลิเคชันอื่นโดยยังคงตัวตนเดิมไว้ทำได้ง่ายกว่า และการ export ข้อมูลออกจากแพลตฟอร์มมาโฮสต์เองก็อย่างน้อยยังพอเป็นไปได้ แม้ประสบการณ์ผู้ใช้จะยากอยู่บ้าง
ตัวอย่างเช่น ผมเพิ่งลองใช้ Tangled ครั้งแรกเมื่อไม่นานนี้ และสามารถล็อกอินด้วยโดเมนที่อิง bsky เดิม (h14h.com) ได้เลย ไม่ต้องสร้างบัญชีใหม่หรือชื่อผู้ใช้ใหม่ เหมือนผมอยู่ที่นั่นอยู่แล้ว
การตั้งค่า self-hosted git repository บน VPS ก็ใช้เวลาอย่างมากแค่ครึ่งวัน และมันทำงานเป็นบริการเบื้องหลังที่แทบไม่ต้องดูแล
ในกรณีแย่ที่สุดก็อาจมีแบนเนอร์บน tangled.org ว่า "repository ของคุณเก่าเกินไปและอาจไม่เข้ากันกับ Tangled เวอร์ชันล่าสุด" และแก้ได้ด้วยการ build image Docker ใหม่แล้ว deploy เวอร์ชันล่าสุด
ในเชิงสถาปัตยกรรม AtProto เข้าใจยากกว่ามากแน่นอน แต่ในแง่การทำให้ผู้ใช้จริงเข้าถึงได้ ผมมองว่ามันง่ายกว่ามาก
ในหัวผมมันไม่ใช่สไลเดอร์อันเดียว แต่ใกล้เคียงกับ บุฟเฟต์ของ trade-off มากกว่า
อนึ่ง ในโลก AP ก็มีทั้งบุคคลและทีมเล็ก ๆ ที่รัน relay, mirror, cache, AppView อยู่เหมือนกัน เพียงแต่ก็จริงที่ว่าพอขนาดใหญ่ขึ้นมันอาจมีค่าใช้จ่ายสูงขึ้น
AT ไม่ได้ให้แค่ความสม่ำเสมอเท่านั้น แต่ยังให้ โมเดลข้อมูลที่ใช้ร่วมกัน ครอบคลุมทั้งแอปด้วย
เพราะแบบนั้นแอปต่าง ๆ จึงสามารถอ้างอิงและเรนเดอร์คอนเทนต์ของแอปอื่นได้ มันคล้ายเว็บของ JSON แบบมีชนิดข้อมูล และแอปที่ต่างกันก็เป็นเลนส์ที่ใช้มองเครือข่ายเดียวกัน
ใครก็สามารถสร้างประสบการณ์ใหม่บนข้อมูลเดิมที่มีอยู่ได้ และใน AP แทบไม่มีสิ่งที่เทียบเคียงได้
AP ผูกข้อมูลเข้ากับแอป แต่ใน AT มันใกล้เคียงกับการที่ทุกแอป query ฐานข้อมูลกลางระดับโลกหนึ่งเดียวที่มีข้อมูลทั้งโลกมากกว่า
ผมไม่เข้าใจว่าทำไมการถกเถียงถึงติดอยู่ที่ relay ตลอด ทุกวันนี้ถ้าต้องการ คุณรัน relay ได้ราว 30 ดอลลาร์ต่อเดือน และจะใช้ relay ของ Bluesky หรือ community relay ฟรีก็ได้
หลายแอปไม่ได้ใช้ relay เลย และพึ่งพา community index อย่าง Constellation(https://constellation.microcosm.blue/) แอปบางตัวไม่รันแม้แต่เซิร์ฟเวอร์หรือฐานข้อมูลของตัวเอง
แต่จริง ๆ แล้วผมอยากโต้แย้งกลับว่า ATproto กระจายศูนย์มากกว่า หรืออย่างน้อยก็พยายามจะเป็นแบบนั้น
ในโลก ActivityPub ตัวตน แอปพลิเคชัน และการโฮสต์ ถูกเชื่อมติดกันโดยเนื้อแท้
ถ้าจะใช้ Lemmy คุณต้องสร้างบัญชี ActivityPub ถาวรที่แยกออกจากกันอีกอันบนอินสแตนซ์ Lemmy นั้น หรือไม่ก็ใช้ Lemmy ได้แค่เท่าที่อินสแตนซ์ Mastodon ของคุณส่งข้อความที่ Lemmy เข้าใจได้
ทุกแอป ActivityPub ใหม่สร้างปัญหา interoperability ชุดใหม่ เพราะแต่ละแอปเป็นเจ้าของตัวตนและการโฮสต์ของตัวเอง
ไม่มีทางที่อินสแตนซ์ Mastodon ที่ผมโฮสต์เองจะมอบตัวตนให้เซิร์ฟเวอร์ Lemmy และให้เซิร์ฟเวอร์ Lemmy สั่งให้อินสแตนซ์ของผมโฮสต์คอนเทนต์แทนผมได้
ถ้าจะให้ถึงระดับที่ ATProto พูดถึง อย่างน้อยก็ต้องทำได้ระดับนั้น เพียงแต่ผมก็ไม่แน่ใจว่ามันตรงกับ ATProto ที่มีอยู่จริงมากแค่ไหน และ ActivityPub ที่มีอยู่จริงก็ไม่ได้ interoperable มากอย่างที่ผู้สนับสนุนพูดเหมือนกัน
บล็อกนี้อธิบายสถาปัตยกรรมได้ดี
แต่ในทางปฏิบัติ ผมคิดว่า "ปัญหา" คือ บริษัท Bluesky เป็นผู้รันแอปหลักและโฮสต์ข้อมูลผู้ใช้ส่วนใหญ่
ในระดับโปรโตคอลมันกระจายศูนย์ก็จริง แต่ระบบที่ใช้งานจริงยังคงรวมศูนย์อย่างมากในแง่ของผู้มีอำนาจควบคุม
ไม่ได้หมายความว่านี่เป็นความผิดของ Bluesky เสมอไป แต่ผมรู้สึกว่าที่ผ่านมาแนวโน้มมันก็เป็นแบบนั้นไม่ใช่หรือ
ปัญหานี้ไม่ได้เป็นเรื่องเฉพาะของ Bluesky หรือ ATProto ไม่ว่าจะเป็นองค์กรแสวงหากำไร องค์กรไม่แสวงหากำไร หรือกลุ่มอาสาสมัคร ก็จะมีคนหาเรื่องมองว่าเป็นปัญหาอยู่เสมอ
ผมไม่ได้มีผลประโยชน์ทับซ้อนกับ Bluesky นอกเหนือจากการเป็นผู้ใช้ยุคแรก ไม่ใช่นักลงทุน และก็เข้าใจทั้งโปรโตคอล บริษัท และเว็บไซต์ในขอบเขตที่ตัวเองทำได้
ตัวเว็บและแอปทำงานได้ดี ผู้คนมัวแต่จดจ่อกับการหาปัญหามากเกินไป แทนที่จะสร้างทางออกที่ใหญ่กว่าและดีกว่า
คนส่วนใหญ่ไม่ได้ต้องการทางแก้ P2P แบบชั่วคราวอย่าง Lemmy หรือ Mastodon พวกเขาต้องการให้คอนเทนต์อยู่ที่เดียว และต้องการให้มีผู้รับผิดชอบที่เรียกร้องได้
เพราะงั้นผมคิดว่า โซเชียลเน็ตเวิร์กแบบ P2P จะไม่มีวันเป็นกระแสหลัก ดราม่ารอบ ๆ Lemmy กับ Mastodon มีมากกว่า Twitter, Reddit, Facebook ฯลฯ รวมกันเสียอีก
นี่เป็นความเห็นส่วนตัวของผม และดูเหมือนคู่สมรสกับเพื่อน ๆ ของผมก็คิดคล้ายกัน
มันกระจายศูนย์ทั้งในทางทฤษฎีและในทางปฏิบัติ
เพียงแต่เพราะ Bluesky ดูแลสัดส่วนที่ใหญ่ที่สุด จึงอาจพูดได้ว่าในระดับชุมชนหรือ mindshare มันยังไม่กระจายศูนย์ แต่จุดนั้นก็กำลังเปลี่ยนไป
มันแค่บอกว่า "ไม่มีอินสแตนซ์" แต่ไม่ได้อธิบายเลยว่าสถาปัตยกรรมนั้นหลบเลี่ยงปัญหาอย่างการยืนยันตัวตน การซิงก์ และการค้นพบได้อย่างไร
การยก Google Reader มาเป็นอุปมาให้ความรู้สึกเป็นลางร้าย
RSS ยังอยู่รอดหลังจาก Google Reader ปิดตัวลงก็จริง แต่ไม่ได้หมายความว่าทุกคอมมูนิตี้ที่ใช้ RSS จะรอดทั้งหมด และหลายแห่งในนั้นทุกวันนี้ก็ไม่รู้ด้วยซ้ำว่า RSS คืออะไร
การอ้างว่าเป็นสิ่งกระจายศูนย์ แต่ยังชี้ไปที่ การรวมศูนย์ทางสังคม ขนาดใหญ่ของระบบนิเวศกระจายศูนย์เหมือนเป็นตัวอย่างที่ดี มันให้ความรู้สึกเกือบจะเป็นแบบฟรอยด์
โดยเฉพาะเมื่อเรารู้ตอนจบของเรื่องนี้อยู่แล้ว
Google Reader รวบรวมบ้าน RSS จำนวนมากไว้ที่เดียว และเพิ่มคุณค่าอย่างกราฟสังคมกับคอมเมนต์เข้าไป แต่สุดท้ายก็พังลงเพราะความเปลี่ยนใจของผู้บริหาร Google จนเกือบฆ่า RSS และทำลายกราฟสังคมที่น่าประทับใจนั้น
ถ้าใช้อุปมาแบบนั้น ก็ยิ่งไม่ทำให้เชื่อมั่นใน ATProto เท่าไร
แอปมีหน้าที่แค่อินเด็กซ์มันเท่านั้น
เพราะงั้นในอุปมานี้ ใครก็สามารถใช้กราฟเดียวกันนั้นชุบชีวิต Google Reader หรือทำบริการแข่งได้
ถ้าอยากเห็น ตอนนี้ http://leaflet.pub ก็ทำงานในลักษณะนั้นจริง ๆ
ลองนึกภาพว่าคุณใช้ RSS reader บนเดสก์ท็อปหรือมือถือไม่ได้ และอ่าน RSS ได้ผ่าน Google Reader หรือบริการโคลนที่มีขนาดใกล้เคียงเท่านั้น
ไม่นานมานี้ก็ยังมีคนพูดถึง NetNewsWire อยู่
ความต่างสำคัญคือบล็อกมีเว็บไซต์ของตัวเอง และไม่จำเป็นต้องใส่บทความเต็มไว้ใน RSS feed
แต่ปกติ Bluesky ไม่ได้ทำงานแบบนั้น ทุกอย่างใน PDS จะถูกทำสำเนา
แถมยังสนับสนุนให้ใส่บทความบล็อกเต็ม ๆ ลงใน PDS เพื่อให้ทำสำเนาได้ง่าย
แบบนั้นใครก็ตามที่อยากอินเด็กซ์ก็หยิบสำเนาไปได้ และคุณควบคุมไม่ได้เลยว่าเขาจะเอาไปทำอะไร
มันไม่จำเป็นต้องเป็นแบบนั้นเสมอไป คุณสามารถโพสต์บล็อกบนเว็บไซต์ของตัวเอง แล้วลงแค่ลิงก์บน Bluesky ก็ได้
การวาง HTTP frontend ครอบบนบัญชี atproto เป็นแนวทางที่แนะนำ และในทางปฏิบัติก็มีคนทำกันมาก
ผมเองก็ทำแบบนั้นบน pfrazee.com และโพสต์บล็อก leaflet ของผมที่มีต้นฉบับอยู่บน atproto ก็ถูกเรนเดอร์บนบล็อกของผมเช่นกัน
การเปรียบเทียบกับ RSS ทำให้เข้าใจผิด
แอป Atproto ไม่เหมือน RSS reader ที่รันบนคอมพิวเตอร์ของผู้ใช้และเชื่อมตรงไปยังแหล่งเนื้อหา
แอป Atproto คือ เซิร์ฟเวอร์ ที่ควบคุม คัดกรอง และจัดรูปแบบเนื้อหาที่จะส่งให้ผู้อ่าน
แอป Atproto สามารถทำการเซ็นเซอร์ shadowban แทรกโฆษณา หรือทำฟีดแบบอัลกอริทึมได้ตามใจ
ผู้ใช้ไร้อำนาจ และครีเอเตอร์ก็เป็นเหยื่อที่ทำได้แค่โวยวาย
การที่ใครก็ได้จะโฮสต์ข้อมูลไว้ที่ไหนก็ได้ ไม่มีความหมายอะไรเลยถ้าไม่มีวิธีกระจายข้อมูลนั้น
อย่างแรก คุณสามารถใช้ AppView อื่นที่ไม่ทำแบบนั้นได้
ฟีดสามารถถูกทำให้เป็นอัลกอริทึมในแบบที่ผู้ใช้ต้องการได้ และถ้ามีหลายแอป ก็จะไม่ต้องถูกผูกกับอัลกอริทึมที่ผู้สร้างศูนย์กลางรายเดียวต้องการ