- AT protocol एक ऐसा प्रोटोकॉल है जो distributed social network की नींव बनता है, और सभी डेटा की पहचान at:// URI से की जाती है
- at:// URI डेटा के निर्माता (उपयोगकर्ता) को authority के रूप में निर्दिष्ट करता है, जबकि वह डेटा वास्तव में कहाँ होस्ट किया गया है यह अलग से पता करना पड़ता है
- URI resolution प्रक्रिया handle को identity (DID) में बदलने, DID Document देखकर hosting server की पहचान करने, और फिर उस server से JSON डेटा request करने के क्रम में होती है
- दो तरह की DID schemes (did:web, did:plc) समर्थित हैं, और दोनों के फायदे-नुकसान तथा डेटा संरक्षित रखने के तरीके अलग हैं
- यह तरीका इस बात पर ज़ोर देता है कि डेटा का स्वामित्व उपयोगकर्ता के पास है, और handle या hosting बदल जाने पर भी कनेक्शन बना रहता है, यानी स्थायित्व मिलता है
AT protocol, at:// URI, और social data की identity resolution प्रक्रिया
# AT protocol और at:// URI की बुनियादी संरचना
- AT protocol कई distributed servers को एक निश्चित standard के अनुसार आपस में communicate करने देता है, और इस पूरे नेटवर्क को 'atmosphere' कहा जाता है
- atmosphere के भीतर हर data item को at:// से शुरू होने वाला एक unique URI दिया जाता है, जो एक तरह से JSON डेटा के लिंक की तरह काम करता है
- पारंपरिक URI संरचना से अलग, AT protocol में डेटा का निर्माता (उपयोगकर्ता) URI की authority होता है
- उदाहरण के लिए,
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z में ruuuuu.de यह दर्शाता है कि वही उस डेटा का मालिक है
- डेटा वास्तव में जिस physical server पर host है, वह URI में सीधे शामिल नहीं होता, और उसे खोजने के लिए अतिरिक्त resolution प्रक्रिया की ज़रूरत होती है
# at:// URI resolution की तीन चरणों वाली प्रक्रिया
- at:// URI को वास्तविक डेटा (JOSN) से map करने के लिए तीन चरण चाहिए
- handle (जैसे ruuuuu.de) को identity (DID: Decentralized Identifier) में बदलना
- handle उपयोगकर्ता की पहचान का alias है और बदल सकता है
- इसलिए इसे एक immutable global ID यानी DID में बदलना ज़रूरी है
- बदलने के तरीके:
- DID Document देखकर डेटा hosting की जानकारी पता करना
- DID Document में उस identity की public key, service endpoint (server) आदि की जानकारी होती है
did:web:~ के मामले में, domain-आधारित access (https://domain/.well-known/did.json)
did:plc:~ के मामले में, PLC directory (https://plc.directory/DID) में lookup किया जाता है
- service endpoint (
serviceEndpoint) ही वास्तविक डेटा hosting server होता है
- hosting server के API के ज़रिए JSON डेटा request करना
com.atproto.repo.getRecord endpoint पर at:// के हर हिस्से को parameter के रूप में भेजकर डेटा माँगा जाता है
- लौटाया गया JSON वही वास्तविक डेटा है जो at:// URI से map होता है
# उदाहरण के साथ resolution प्रक्रिया
- उदाहरण:
at://ruuuuu.de/app.bsky.feed.post/3lzy2ji4nms2z
- handle बदल जाए तब भी, अगर DID-आधारित at:// URI (permalink) इस्तेमाल किया जाए, तो account और data के बीच का संबंध बना रहता है
# DID schemes: did:web और did:plc का अंतर
- did:web:
- आप अपने domain को manage और authenticate कर सकते हैं
- लेकिन domain पर नियंत्रण खो जाने पर पूरा ID खोने की आशंका होती है
- did:plc:
- PLC (Public Ledger of Credentials) ID के संचालन का प्रमुख माध्यम है
- यह domain से बँधा नहीं होता, लेकिन PLC operator updates को अस्वीकार कर दे जैसी सीमित control संभावना मौजूद रहती है
- सभी परिवर्तन hash के ज़रिए verify और track किए जा सकते हैं
# identity, hosting और data का विभाजन तथा स्थायित्व
- at:// identity और data hosting को अलग करता है, जिससे user data को portable बनाना और permanent links बनाना संभव होता है
- Handle (उपनाम) कभी भी बदला जा सकता है, और hosting server भी उसी तरह migrate किया जा सकता है
- DID (identity) immutable रहता है, इसलिए उसके आधार पर बना at:// URI एक स्थायी permalink की तरह इस्तेमाल किया जा सकता है
- DID Document में handle के ownership proof, signature verification key, और hosting जानकारी सब शामिल होती है, जिससे भरोसा और flexibility दोनों मिलते हैं
# व्यावहारिक उपयोग और development संदर्भ
- व्यवहार में अधिकांश AT-आधारित apps Websocket आदि के माध्यम से डेटा push के रूप में लेते हैं और उसे अपनी internal DB में aggregate करते हैं
- फिर भी at:// URI resolution को समझना network की विशेषताओं को समझने और data portability सुनिश्चित करने के लिए आवश्यक है
- at:// ढाँचा HTTP, DNS, JSON के ऊपर social network abstraction देता है, और डेटा का स्वामित्व उपयोगकर्ता के पास है इसे तकनीकी रूप से लागू करता है
# निष्कर्ष
- AT protocol और at:// URI social data की identity, connectivity, और permanence को तकनीकी रूप से एक नए स्तर पर ले जाते हैं
- developers के लिए handle resolution, DID का उपयोग, DID Document की संरचना, और वास्तविक डेटा request करने की विधि जैसे मुख्य workflow को समझना ज़रूरी है
- इस संरचना की वजह से अपनी content, identity, और hosting location के बीच flexibility और ownership हासिल की जा सकती है
1 टिप्पणियां
Hacker News राय
हाल की ATProto से जुड़ी पोस्टों से प्रेरित होकर मैंने bsky जॉइन किया, लेकिन वहाँ बस अंतहीन अमेरिकी राजनीति ही दिखी। "ऐसी पोस्ट कम दिखाएँ" पर बार-बार क्लिक करने से भी कोई खास फर्क नहीं पड़ा। सोच रहा हूँ क्या यही इस प्लेटफ़ॉर्म का मूल स्वभाव है। विदेशों की अजीब बहसों पर वही घिसी-पिटी राय बार-बार देखना मानसिक रूप से अच्छा नहीं लगता।
मुझे अब भी नहीं पता कि यह प्रोजेक्ट वास्तव में identity और data ownership की समस्याओं को अर्थपूर्ण तरीके से हल करता है या नहीं। identity के मामले में आपके पास या तो अपना domain होता है, या किसी और का domain इस्तेमाल करते हैं, जैसे Bluesky वगैरह। ज़्यादातर लोगों के पास domain नहीं होता, तो आख़िरकार उनकी identity किसी third party के हाथ में ही रहती है। data के साथ भी यही है। अगर Bluesky या किसी दूसरे server पर आपका अकाउंट block हो जाए, तो storage भी बंद हो जाती है और आप data कहीं और ले जाने का मौका भी खो सकते हैं। यह ईमेल जैसा ही है। जब तक आपका अपना domain और server नहीं है, असल में आपके नियंत्रण में कुछ नहीं है।
Dan की व्याख्याएँ हमेशा शानदार होती हैं। हाल की उस ख़बर के संदर्भ में यह और भी समयानुकूल है कि Bluesky PLC का संचालन अधिकार transfer कर रहा है। हमारी टीम ने भी fair.pm में WordPress plugins के distributed वितरण के लिए यही DID system चुना है — मोटे तौर पर कहें तो यह App Store जैसा package management है। Bluesky की तरफ़ से, ख़ासकर Bryan ने, बहुत मदद की और हमें libsodium इस्तेमाल करने के लिए Ed25519 key support तक दिलवाया। हमारा protocol DID और Bluesky के stackable moderation के ऊपर design किया जा रहा है, लेकिन हम सीधे atproto इस्तेमाल नहीं करते। महत्वपूर्ण बात यह है कि DID एक W3C standard है, इसलिए PLC atproto तक सीमित नहीं है।
at:// को resolve करने के लिए plc.directory पर GET request भेजनी पड़ती है, और यहीं सिस्टम मुझे 100% centralized model में बदलता दिखता है। कम-से-कम कई trusted directories को protocol से अलग रखने का विकल्प होना चाहिए था, जैसे DNS root या CA।
at:// links को store करने वाले सभी servers को आख़िरकार DNS/HTTPS के ज़रिए canonical permalink representation ढूँढनी होगी। अगर DNSSEC ठीक से न हो, तो यह ढाँचा कुछ कमजोर लगता है। मैंने इस पर बहुत गहराई से नहीं सोचा, लेकिन पहली चिंता यही आती है कि DNS poisoning जैसी समस्या से कोई attacker मेरे नाम से पोस्ट कर सकता है, क्योंकि public key तो DNS से मिली DID में शामिल होगी।
पोस्ट में DID change history में इस्तेमाल होने वाली keys के बारे में पर्याप्त जानकारी नहीं है। उदाहरण के लिए, अगर मैं foobar.bsky.social हूँ, तो मुझे याद नहीं कि मैंने कभी कोई key खुद upload की हो या उसे download करने के लिए कहा गया हो। जानना चाहता हूँ कि keys असल में कहाँ हैं, उनका मालिक कौन है, और वे कब और कैसे इस्तेमाल होती हैं। और अगर DID plc.directory पर है, तो उस साइट का operator मेरी DID को मनमाने ढंग से overwrite करके मेरी identity हड़प न ले, इसे रोकने की व्यवस्था क्या है?
at:// का concept दिलचस्प है, लेकिन मैं उन समस्याओं को लेकर भी चिंतित हूँ जो data ownership आधारित systems में आ सकती हैं। जैसे, user के पास data है, तो वह कभी भी content को मनचाहे तरीके से बदल या मिटा सकता है। पहले कोई ठीक-ठाक पोस्ट लिखी, फिर बाद में उसे दुर्भावनापूर्ण ढंग से बदल दिया। भले ही पुराने पोस्ट का hash रखकर tamper रोकने की कोशिश करें, नई services को उस इतिहास का पता नहीं होगा। likes/upvotes जैसी चीज़ों को track करना भी मुश्किल लगता है। अगर हर कोई सब कुछ अलग-अलग objects के रूप में store करे, तो किसने upvote किया यह ढूँढना कठिन होगा। नकली अकाउंट बनाकर कोई अपना ही कंटेंट बार-बार आगे बढ़ाता रहे, ऐसा भी लगता है कि रोकने की सीमा नहीं होगी। और अगर कई platforms से आने वाले अकाउंट्स की संख्या बहुत बड़ी हो जाए, तो spam और malicious activity की moderation असंभव नहीं हो जाएगी? यदि हर अकाउंट अपना data खुद manage करता है, तो transparency, accountability, moderation, spam control जैसे पूरे system design की बुनियाद टिकती है या नहीं, इस पर मुझे संदेह है।
यह मुझे कई crypto protocols जैसा लगता है, जो decentralization की बात तो करते हैं लेकिन आख़िर में एक ही platform से बँध जाते हैं।
"at:// URI से JSON कैसे मिलता है" यह एक बुनियादी संरचनात्मक सवाल है। documentation पढ़ने पर भी समझ नहीं आता कि आख़िर "उस JSON" की ज़रूरत क्यों है। व्यक्तिगत रूप से यह तरीका मुझे सहज नहीं लगता।
क्या यह protocol एक विशाल public Kafka topic जैसा काम करता है? जैसे, अगर मैं नई webapp बनाऊँ, तो data खुद store करने की बजाय हर user अपना data अपनी जगह रखे, मैं एक listener रखूँ, protocol data propagation की गारंटी दे, और app उस data को सुनकर cache कर ले — क्या मॉडल ऐसा है? अवधारणात्मक रूप से यह काफ़ी दिलचस्प है, लेकिन जानना चाहता हूँ कि updates miss न हों इसके लिए offsets, scale के लिए partitions जैसी Kafka की अवधारणाएँ भी लागू होती हैं या नहीं।