SSH के लिए नेटिव ग्राफ़िकल शेल
(probablymarcus.com)- अगर सर्वर और edge डिवाइस केवल terminal दिखाने के बजाय browser-based graphical shell दें, तो दूसरे डिवाइस से remote apps को अधिक स्वाभाविक तरीके से इस्तेमाल किया जा सकता है
- यह shell app home screen और app-to-app URL lookup API देता है, जिससे फ़ाइल या resource को सही app तक पहुँचाने का flow बनाया जा सकता है
- apps छोटे HTTP server के रूप में UI उपलब्ध कराते हैं, लेकिन यह सामान्य public web server नहीं होते, बल्कि मुख्यतः SSH या local access को ध्यान में रखकर चलने वाले private server होते हैं
- encryption को हर app में अलग से implement करने के बजाय SSH layer पर छोड़ा जा सकता है, इसलिए हर app server कम dependencies के साथ सरल संरचना बनाए रख सकता है
- Lewis ने इसके लिए Outer Loop को SSH browser के रूप में बनाया और open source Outer Shell जारी किया, जिसे HTML apps और native outerframe apps दोनों को ध्यान में रखकर डिज़ाइन किया गया है
SSH पर चलने वाला ग्राफ़िकल शेल
- web browser पहले से ही ऐसा स्थापित मॉडल है जिसमें एक डिवाइस यानी server दूसरे डिवाइस यानी client को अनुभव उपलब्ध कराता है
- यही तरीका server और edge डिवाइस पर लागू किया जाए तो remote environment में भी terminal-based apps की जगह graphical apps इस्तेमाल किए जा सकते हैं
- shell apps के लिए home screen देता है, और हर app एक छोटे HTTP server के रूप में web user interface serve करता है
- shell API apps को एक-दूसरे के URL खोजने देता है, जिससे apps के बीच कनेक्शन बनता है
- उदाहरण के लिए, अगर कोई app खुद को text editor के रूप में register करे, तो किसी दूसरे app में text file पर double-click करके उसे उस editor app में खोला जा सकता है
- apps मौजूदा HTML-based web apps भी हो सकते हैं, या native outerframe apps भी
इम्प्लीमेंटेशन का तरीका और जारी प्रोजेक्ट
- app HTTP server आम तौर पर ऐसे private server की तरह काम करते हैं जिन तक नेटवर्क के दूसरे डिवाइस सीधे पहुँच नहीं सकते
- उपयोगकर्ता इन्हें SSH के ज़रिए या local रूप से इस्तेमाल करते हैं
- ज़्यादातर मौजूदा web-based server tools के विपरीत, ये localhost port के बजाय मुख्यतः Unix domain socket file का उपयोग करते हैं
- Unix domain socket file port की तरह होती है, लेकिन filesystem में मौजूद रहती है और उसके पास स्पष्ट user permissions होते हैं
- हर HTTP server को encryption खुद संभालने की ज़रूरत नहीं होती
- encryption SSH layer में संभाला जाता है
- इसकी वजह से हर app server बिना dependencies के बहुत सरल रह सकता है
- Outer Loop को ऐसे ग्राफ़िकल शेल के लिए SSH browser के रूप में बनाया गया है
- open source Outer Shell जारी किया गया है
- संबंधित दस्तावेज़ तीन हिस्सों में उपलब्ध हैं
- Outer Loop: browser कैसे काम करता है
- Outer Shell: Outer Shell API और apps जोड़ने का तरीका
- Outerframe: native apps कैसे काम करते हैं
- browser में Unix socket connection जैसी क्षमताओं को अब तक बहुत niche feature माना गया, लेकिन SSH और sudo awareness जैसी सुविधाओं के साथ जुड़कर ये नई तकनीकी संभावनाएँ खोल सकती हैं
- Jupyter और Tensorboard जैसे अलग-अलग server-style web apps आए, लेकिन हर एक ने अपना एकबारगी security protocol इस्तेमाल किया, इसलिए इन्हें “सही तरीके” से पास करने का कोई साझा तरीका स्थापित नहीं हो पाया
- AI के code writing में मददगार बनने के साथ, हर app के लिए target platform के हिसाब से अलग codebase रखना व्यावहारिक हो गया है, और एक ऐसे web architecture का प्रस्ताव दिया गया है जिसमें reading और lightweight apps के लिए HTML, जबकि work-oriented apps के लिए platform-specific native apps इस्तेमाल हों
1 टिप्पणियां
Hacker News की राय
इस विचार को कमतर बताने वाली इतनी प्रतिक्रियाएँ देखकर काफ़ी झुंझलाहट होती है। लगता है HN के कई पाठक अभी भी TUI श्रेष्ठतावाद में फँसे हैं और GUI में ज़्यादा दिलचस्पी नहीं रखते
दो बातें मुख्य हैं। TUI, GUI से स्वभावतः बेहतर नहीं है, और SSH को transport layer के रूप में pty forwarding, यानी TUI display layer ही नहीं बल्कि GUI display layer को भी support करना चाहिए
असल में ये दोनों बातें 30 साल पहले UNIX में पहले ही साकार हो चुकी थीं, और X protocol तथा
ssh -Xवाला समाधान भी था। लेकिन X जीत नहीं पाया, और वह भविष्य नहीं आया जिसमें remote machine परssh -Xसे connect करकेgnome-control-centerचलाने पर settings window खुलती और आप remote computer configure कर पाते। अगर आपको लगता है कि यह ठीक से होता है, तो खुद आज़मा लें; experience बेहद खराब हैफिर भी यह ज़रूरत बनी रही, और Jupyter Notebook जैसे apps web server के रूप में develop होने लगे। web का document format, styling और client scripting language, अपनी तमाम कमियों के बावजूद interactive apps की display layer के तौर पर इस्तेमाल लायक हो गए, और चूँकि web की शुरुआत ही remote documents से हुई थी, network transparency भी उसमें built-in है
Electron apps को देखें तो यह मानना पड़ेगा कि HTML/CSS/JS stack desktop apps में भी dominant position पर आ गया है, और इसे SSH के जरिए remote apps की display layer के रूप में इस्तेमाल करना स्वाभाविक है। यह project भी उसी flow में लगता है
Electron app में भी X की तरह display server और client अलग-अलग होते हैं; उन्हें क्रमशः “renderer process” और “main process” कहा जाता है और वे IPC से communicate करते हैं। सैद्धांतिक रूप से, अगर सही IPC transport मौजूद हो तो main process और renderer process को अलग-अलग machines पर चलाया जा सकता है; यह idea उससे बहुत अलग नहीं लगता
ssh -Xइस्तेमाल होने वाले toolkit और दूरी/latency पर निर्भर करते हुए अच्छा काम करता है। उदाहरण के लिए, rendering pipeline की वजह से Gtk अच्छा नहीं हैदूरी और latency काफी बढ़ जाएँ तो सोचना पड़ता है कि इसे user को कैसे दिखाया जाए। माध्यम कोई भी हो, physical limits से बचा नहीं जा सकता। remote graphical access का वादा करने वाले किसी भी tool को latency ध्यान में रखकर design करना चाहिए। vim latency में भी अच्छा चलता है, क्योंकि वह असल में commands को queue में जमा करके भेजता है
waypipeकहते हैं। इसलिए वह भविष्य मरा नहीं हैssh -Xसे remote machine काgnome-control-centerखोलकर server configure करने वाला भविष्य नहीं आया। GUI से server configure करना एक घिनौना तरीका है, और यह Windows दुनिया तक ही सीमित रहे तो बेहतर हैयह अतीत में भी कई बार दिखी, समस्या ढूँढ़ती हुई solution जैसी चीज़ लगती है। नीचे वाला quote इस कोशिश पर ठीक बैठता लगता है
“जो लोग Unix को नहीं समझते, वे उसे खराब तरीके से फिर से बनाने के लिए अभिशप्त हैं।” ~Henry Spencer
लगभग हर developer-targeted machine में SSH server installed और accessible होता है
SSH terminal को 1960 के दशक के text-only कचरे जैसा क्यों दिखना चाहिए? TUI ही SSH से stream करने लायक सबसे अच्छा target क्यों होना चाहिए? terminal में 4K movie क्यों नहीं देख सकते या pinch zoom से web browse क्यों नहीं कर सकते?
SSH से Linux directory को native UI components के रूप में देखने जैसा idea ठीक लगता है
हालाँकि कुछ चीज़ें
sshfsmount जैसे तरीकों से पहले ही solve की जा चुकी समस्याएँ भी लगती हैंबहुत पहले programmable thermostat पर लिखा एक लेख याद आता है। उसमें कहा गया था कि वह इतना powerful है कि बहुत गहराई से configure किया जा सकता है, लेकिन ज़्यादातर लोगों के लिए इस्तेमाल करना बेहद खराब है। सार कुछ ऐसा था कि “लोग आपका जटिल system सीखना नहीं चाहते, वे उस system द्वारा वादा किए गए फायदे चाहते हैं।” अच्छा UI उस gap को कम करना जानता है
graphical app के frontend और backend को अलग करने का idea अच्छा है। लेकिन इसे नया कहना मुश्किल है; शायद मैं कुछ miss कर रहा हूँ
लगता है इन्हें
X11Forwarding yesयाhtml5 web appके बारे में पता नहीं हैbrowser के Unix socket से connect करने जैसी capability को बहुत niche feature होने की वजह से reject किया जाता रहा है
वह security issue है, इसलिए implement नहीं किया गया। कम-से-कम raw Unix sockets के लिए तो यही है; WebSocket या HTTP तक सीमित दूसरे ports संभव हैं
browser को किसी भी socket से connect करने की अनुमति नहीं दी जा सकती। कई sockets स्पष्ट रूप से browser connection नहीं चाहते, या उन्हें यह अहसास ही नहीं होता कि browser connect कर सकता है
इसलिए किसी तरह की allowlist जोड़नी पड़ेगी, और तब यह niche feature के हिसाब से बहुत complex हो जाएगा
इसलिए मुझे लगता है कि मुख्य बात niche nature ही थी
संदर्भ के लिए, Outer Loop ने allowlist जोड़ी है: https://outerloop.sh/unix-domain-sockets/
मैं यह समझने की कोशिश कर रहा हूँ कि यहाँ Outer Shell कैसे काम करता है। वेबसाइट इसकी प्रेरणा कुछ इस तरह बताती है
Jupyter या TensorBoard जैसे ऐप अगर remote server पर चल रहे हों, तो वे आम तौर पर standard web browser में दिखाई नहीं देते। क्योंकि पूरी इंटरनेट को इन ऐप्स तक पहुँच देना बहुत जोखिम भरा है। इसके बजाय वे server के local port पर चलते हैं, और मेरा कंप्यूटर वहाँ सीधे access नहीं कर सकता
परंपरागत रूप से, इन्हें access करने के लिए नया terminal खोलकर
ssh -L 24601:localhost:8889 mrcslws@lambda4.mycompany.com &,ssh -L 24602:localhost:6006 mrcslws@lambda4.mycompany.com &जैसे commands चलाने पड़ते थेक्या यह सही है? आम तौर पर तो prototyping के समय ही ऐसी SSH forwarding इस्तेमाल होती है, और deploy करते समय
myjupyternotebook.comजैसी website बनाकर authentication लगा देते हैं ताकि दूसरे लोग access न कर सकें। HTTP basic authentication भी कोई बहुत बड़ी बात नहीं हैअगर आप public exposure को HTTP के बजाय SSH पर रखना चाहते हैं, तो VPN या tunnel के पीछे रखने जैसे दूसरे विकल्प भी हैं
Outer Loop बहुत शानदार है, लेकिन मुझे साफ़ नहीं है कि इसकी जरूरत क्यों है। शायद मैं कुछ miss कर रहा हूँ, इसलिए यह समझने में मदद चाहिए कि इसे क्यों बनाया गया
मैं deep learning experiments, GPU kernel optimization, robotics development जैसे use cases के ज्यादा करीब हूँ। robot बस एक चलता-फिरता server ही है, और इन मामलों में हम साफ़ तौर पर remote computer इस्तेमाल कर रहे होते हैं
इस समूह के लोगों को आपके सुझाए flow की तुलना में यह tool ज्यादा intuitive लग सकता है। हालांकि हो सकता है मैं अपनी सोच ही इसमें project कर रहा हूँ
मुझे यह उन बुनियादी चीजों में से एक लगता है जो अस्तित्व में हो सकती हैं। कुछ-कुछ remote-first graphical operating system जैसा
ssh -D 4711 -q -C -N user@hostइससे
localhost:4711एक SOCKS5 proxy बन जाता है जिसे browser में set किया जा सकता हैबेशक WireGuard VPN बेहतर है। सबसे बड़ी बात, SSH एक ही TCP connection पर multiplex करता है, इसलिए अगर एक packet खो जाए तो उसके retransmit होने तक सारा forwarded traffic head-of-line blocking झेलता है
लगता है लेखक ने Cockpit के बारे में नहीं सुना है
जिन चीजों को वे “नहीं है” या “नई” कह रहे हैं, वे 10 साल से ज्यादा समय से Cockpit में मौजूद हैं। socket-based web server connections, server apps का backend-frontend separation, shell access वाला server console—ये विचार भी शामिल हैं
“क्या यह अजीब नहीं है कि यह अभी तक मौजूद नहीं है?” इस सवाल का मेरा जवाब होगा—नहीं। क्योंकि यह पहले से काफी समय से मौजूद है
सच्चे मन से,
HN guidelines police :-)
https://news.ycombinator.com/newsguidelines.html
शानदार लेख है। अपनी research के लिए bookmark करूँगा
मेरे terminal की “clickity clackity” feature [0] local machine से जुड़ी है, इसलिए जैसे ही remote में जाते हैं, graphical nature गायब हो जाती है
offline replay [1] की वजह से यह धीरे-धीरे बदल रहा है। इसमें native GUI और TUI साथ काम करते हैं और rewind जैसी capabilities खोलते हैं। लेकिन अभी काफी लंबा रास्ता है, और दूसरों को सही तरीके से experiment करते देखना अच्छा है। terminal एक बहुत ज्यादा उपेक्षित क्षेत्र है
[0] https://terminal.click
[1] https://terminal.click/posts/2026/06/tui-stability/#:~:text=...
terminal से परिचित लोग भूल जाते हैं कि university में न सीखने वाले व्यक्ति के लिए SSH कितना hostile है
अगर यह VPS manage करने वाली छोटी team के लिए platform person hire किए बिना entry barrier कम कर सके, तो यह सफल है। हालांकि keys और jump hosts को कैसे handle करेगा, यह जानने की उत्सुकता है
कमाल है। यह निश्चित रूप से सही दिशा में जा रहा है
frontend और backend के बीच separation layer को सबसे छोटे संभव “टुकड़े” पर काटना चाहिए
यहाँ तंज कस रहे कई लोग भी latency और extra overhead को खुद “महसूस” करेंगे तो समझेंगे। अलग-अलग use cases के हिसाब से data को सावधानी से काटने पर पर्याप्त सोच नहीं लगाई गई
आगे बढ़कर कहूँ तो, demo में जिस
topapp के बारे में कहा गया कि “settings को बार-बार हिलाकर load बनाया”, उसमें client side पर rendering को ज्यादा JIT करना चाहिए था। तब Pi और client के बीच आने-जाने वाली informationpsoutput के compressed delta भर तक घट जातीऐसा नहीं करना चाहिए। browser को general socket permissions न देने के पीछे बहुत पुराने, मजबूत security reasons और web control plane isolation के कई कारण हैं
mechanically सबसे नज़दीकी उपमा यह है कि 3-wheel ATV खराब idea क्यों है
sockets default रूप से blocked हों, और server side पर explicitly allowlist किए जाने के बाद ही खुलें
असली sudo awareness हो, ताकि sudo password के बिना root sockets तक पहुँचा न जा सके। यह feature इसलिए महत्वपूर्ण है क्योंकि नहीं तो लोगों को user-accessible sockets के साथ root backend चलाने के लिए प्रेरित करने वाला incentive बन जाएगा
details यहाँ हैं: https://outerloop.sh/security/