स्क्यूमॉर्फिक डेस्कटॉप: मज़ाक नहीं, रेंडरिंग की समस्या
DEsk जैसा स्क्यूमॉर्फिक Wayland डेस्कटॉप GPU पाइपलाइन पर वह बोझ डालता है जो फ्लैट UI कभी नहीं डालता। जानिए डेस्कटॉप को ray tracing करने की असली कीमत क्या है।

यहाँ एक दावा है जो दोनों खेमों को चुभेगा: स्क्यूमॉर्फिज़्म यूज़र्स के नफ़रत करने की वजह से नहीं मरा। वह महँगा था — पिक्सल में, GPU साइकल में, और डिज़ाइनर के घंटों में — और फ्लैट डिज़ाइन ने अर्थशास्त्र की वजह से जीत हासिल की, सौंदर्यशास्त्र की वजह से नहीं। DEsk, Linux के लिए एक पूरा स्क्यूमॉर्फिक Wayland डेस्कटॉप प्रोजेक्ट है, जिसमें विंडो ray-traced अखरोट की मेज़ पर रखे कागज़ों की शीट जैसी दिखती हैं। यह इस थीसिस की सालों में पहली असली परीक्षा है। और यह बात को खूबसूरती से साबित करता है: जिस पल आप तय करते हैं कि पूरा कमरा एक डेस्क लैंप से रोशन है, आप ऐसी रेंडरिंग आर्किटेक्चर के लिए साइन अप कर लेते हैं जो GNOME Shell से ज़्यादा किसी गेम इंजन से मिलता-जुलता है।
स्क्यूमॉर्फिक डेस्कटॉप को असल में क्या रेंडर करना पड़ता है
फ्लैट डिज़ाइन रेंडरर पर मेहरबान है। Mutter या KWin जैसा आधुनिक compositor अपनी ज़्यादातर ज़िंदगी texture compositing में बिताता है: एप्लिकेशन buffers देते हैं, आप quads बनाते हैं, कभी-कभार rounded-corner shader और drop shadow लगा देते हैं, बस। पिछले दशक में बने किसी भी GPU पर पूरा फ्रेम लगभग मुफ़्त है, और यही वजह है कि फ्लैट UI छा गया। इसकी कोई कीमत नहीं और एक सरल transform से यह किसी भी resolution पर स्केल हो जाता है।
स्क्यूमॉर्फिज़्म इस सौदे के हर हिस्से को तोड़ देता है। जिस पल आपकी डिज़ाइन भाषा कहती है “यह विंडो रेशों, मोटाई और मुड़े हुए कोने वाले क्रीम रंग के कागज़ की शीट है,” तो आपको ये चाहिए:
- मटीरियल शेडिंग — कागज़ सिर्फ़ एक रंग नहीं है, वह रेशेदार texture वाला एक subsurface-जैसा diffuse व्यवहार है। यह per-pixel काम है, कोई fill rect नहीं।
- एकसमान रोशनी — दृश्य की हर चीज़ को इस पर सहमत होना चाहिए कि रोशनी कहाँ से आ रही है। एक डेस्क लैंप का मतलब है एक shadow map (या ray query), जिसमें हर चीज़ शामिल हो, लाइव विंडो सामग्री भी।
- कॉन्टैक्ट शैडो — “मेज़ पर रखी” विंडो को वहाँ ambient occlusion चाहिए जहाँ कागज़ अखरोट से मिलता है, वरना भ्रम तुरंत टूट जाता है।
- विरूपण (Deformation) — DEsk में आप कागज़ का कोना उठाकर शीट का पिछला हिस्सा देख सकते हैं, और बंद करने पर विंडो को गेंद की तरह मसल सकते हैं। यह लाइव texture पर vertex displacement है, scale animation नहीं।
इनमें से कोई भी चीज़ अकेले में मुश्किल नहीं है। गेम इंजन इन्हें दशकों से कर रहे हैं। पर desktop compositor पर ऐसी बाधाएँ हैं जो गेम पर नहीं होतीं: उन “कागज़ की शीटों” की सामग्री मनमाना एप्लिकेशन आउटपुट है, जो 60fps तक अपडेट होता है, और आप उसके बारे में कुछ भी पहले से compute नहीं कर सकते। आप एक लाइव वीडियो फ़ीड को ऐसे shade कर रहे हैं जैसे वह रेशे पर लगी स्याही हो।
कंपोज़िटर कैसे गेम इंजन बन जाता है
DEsk के अपने architecture docs इस कदम को साफ़ शब्दों में बताते हैं: कमरा — मेज़, शेल्फ़, कंसोल, पोस्ट बॉक्स — GLES 3 के ज़रिए GPU पर ray-trace होता है, CPU tracer फ़ॉलबैक के रूप में है, और नतीजा स्क्रीन साइज़ के हिसाब से cache होता है। उस एक वाक्य में पूरी इंजीनियरिंग रणनीति है, और इसे खोलकर देखना लायक है, क्योंकि यही इसे करने का एकमात्र समझदार तरीका है।
असली चाल है स्टैटिक/डायनामिक विभाजन। कमरे को हर फ्रेम में ray-trace करना बेतुका होगा, क्योंकि एक मामूली path tracer भी मिड-रेंज हार्डवेयर पर फ्रेम के लिए सेकंड मांगता है। पर कमरा स्थिर है। मेज़ नहीं हिलती; लैंप नहीं हिलता। तो आप इसे लॉगिन पर एक बार ट्रेस करते हैं (“पहले लॉगिन पर कमरा एक बार बनता है: GPU पर कुछ सेकंड, बिना GPU के ज़्यादा”), radiance cache कर लेते हैं, और उसके बाद कमरा बस एक textured backdrop है। डायनामिक चीज़ें, यानी कागज़ की विंडो, दराज़ और पोस्ट बॉक्स की चिट्ठियाँ, ऊपर से forward-render होती हैं, cached दृश्य से मेल खाती रोशनी के साथ।
// Sketch of the two-layer architecture a skeuomorphic shell converges on
struct frame {
// Layer 1: the room. Traced once at login, cached per output size.
texture room_cache; // desk, shelf, post box, baked lamp light
// Layer 2: dynamic objects, forward-rendered each frame.
vector<object> paper_windows; // app buffers mapped onto paper quads
vector<object> drawer_items;
vector<object> notifications;
};
void render(frame *f) {
blit(f->room_cache); // one textured quad, nearly free
for (auto &o : f->paper_windows)
draw_paper(o); // fibre shader + fake AO + dog-ear
composite(f->drawer_items, f->notifications);
}
यह संयोग नहीं कि यही 1993 में Myst का तरीका था: पहले से render किए गए स्थिर दृश्य, जिनके ऊपर डायनामिक sprites composite होते थे। कई पर्यवेक्षकों ने कहा कि DEsk में “भारी Myst वाइब्स” हैं, और वे जितना जानते हैं उससे ज़्यादा सही हैं। यह सिर्फ़ सौंदर्य की समानता नहीं, वही रेंडरिंग आर्किटेक्चर है, जो उन्हीं बाधाओं से निकला है (महँगा global illumination, सस्ती compositing), जो आज भी कायम हैं। इतिहास के शौक़ीन के तौर पर मुझे यह बहुत पसंद है। तीस साल की GPU प्रगति के बाद भी “मैं अपना desktop ray-trace कैसे करूँ” का ईमानदार जवाब अब भी यही है: मत करो। एक बार ट्रेस करो और उसके बारे में झूठ बोलो।
मल्टी-मॉनिटर डिज़ाइन में भी यही व्यावहारिकता दिखती है। हर स्क्रीन के लिए बड़ा कमरा ray-trace करने के बजाय, अतिरिक्त डिस्प्ले मेज़ के “और बोर्ड, उसी से आगे बढ़ते हुए” दिखाते हैं। स्टैटिक backdrop फैलता है, और cached दृश्य सभी outputs में बँट जाता है। सत्र के बीच स्क्रीन निकालने पर उसकी विंडो बची हुई किसी दूसरी स्क्रीन पर reparent हो जाती हैं। यह सरल है, पर यह hotplug event पर हर बार दोबारा ट्रेस करने की असली मुश्किल समस्या को टाल देता है।
स्क्यूमॉर्फिज़्म GPU पर वह बोझ डालता है जो फ्लैट UI कभी नहीं डालता
आइए बोझ को ठोस तरीके से देखें, क्योंकि इस स्टाइल की ज़्यादातर चर्चाओं में “यह भारी है” बिना कमाए बहुत ज़्यादा श्रेय ले लेता है। देखें कि एक फ्लैट compositor एक विंडो के लिए क्या करता है, और DEsk का कागज़ वाला रूपक क्या माँगता है:
फ्लैट: क्लाइंट का wl_buffer texture के रूप में बाँधें, एक quad बनाएँ जिसका shader उससे sample करे, शायद signed-distance function से कोने गोल करें, और एक सस्ता 9-tap शैडो लगाएँ। प्रति विंडो लागत: हर पिक्सल पर कुछ texture reads, सब cache-फ्रेंडली क्षेत्रों से।
कागज़: क्लाइंट buffer सिर्फ़ “स्याही” है। आपको कागज़ की base layer भी चाहिए (रेशा texture, किनारों का गहरा होना, मोटाई वाली लिप), मुड़े कोने की अलग folded geometry जिसकी अपनी रोशनी हो, दृश्य में विंडो की स्थिति पर निर्भर डेस्क से कॉन्टैक्ट शैडो, और ऐसी रोशनी जो कमरे के cache में बेक किए लैंप से मेल खाए। और जब उपयोगकर्ता किनारा खींचकर “और कागज़ निकालता है”, तो कागज़ का quad सामग्री से स्वतंत्र रूप से resize होता है। आपने विंडो geometry को surface geometry से अलग कर दिया है, जो कोई सामान्य compositor नहीं करता।

पर असली लागत थ्रूपुट में नहीं है। आधुनिक GPU कुछ अतिरिक्त texture layers पर हँसते हैं। असली लागत है पाइपलाइन की जटिलता। फ्लैट compositor का shader बजट पूरे सत्र के लिए एक-दो programs है। स्क्यूमॉर्फिक शेल को एक छोटा material system चाहिए: कागज़, अखरोट, पीतल, काँच (घड़ी के लैंप के लेंस), कपड़ा। हर material एक shader variant है; हर variant किसी driver पर टूट सकता है; और हर एक साझा लैंप रोशनी से interact करता है, इसलिए इन्हें अलग-अलग लिखा नहीं जा सकता। यही वजह है कि Enlightenment और GTK2 के क्लासिक theming दौर खत्म हो गए, और practitioners की सबसे मज़बूत आपत्ति यही है: window manager तो आसान हिस्सा है। हर एप्लिकेशन अब भी अपनी सामग्री GTK या Qt से बनाता है, और compositor-side अखरोट से कोई libadwaita ऐप असली मेज़ पर रखा हुआ नहीं लगेगा। DEsk इसे सिर्फ़ आंशिक रूप से हल करता है: client-side-decorated विंडो “कागज़ पर भी बैठती हैं”, यानी यह रूपक ऐप्स को लपेटता है, उन्हें बदलता नहीं।
Wayland इसे एक साथ आसान और कठिन बनाता है
ऐसा प्रोजेक्ट 2010 में नहीं, अब क्यों मौजूद है, इसका कारण है। Wayland की मूल वास्तुकला का दाँव है कि compositor पूरे फ्रेम का मालिक है, हर पिक्सल उससे होकर गुज़रता है। यही दाँव स्क्यूमॉर्फिक शेल को लगाना चाहिए। X11 के तहत कोई ऐप जहाँ चाहे वहाँ draw कर सकता था, और सबसे अच्छा आप कर सकते थे एक compositing manager जो बेतहाशा विंडो reparent करता और उम्मीद करता। Wayland के तहत शेल साफ़, अलग-थलग surface buffers पाता है और यह तय करने की पूरी आज़ादी रखता है कि उन्हें कैसे दिखाया जाए। अगर आप किसी surface को मुड़े कोने वाले विकृत कागज़ पर map करना चाहते हैं, तो Wayland पहला display system है जहाँ यह सिर्फ़ कठिन है, बेमतलब नहीं।
पर Wayland बिल भी बढ़ाता है। Desktop environment सिर्फ़ renderer नहीं है; वह renderer प्लस बीस साल का protocol जमाव है: पुराने ऐप्स के लिए Xwayland, input methods के लिए IBus bridging (DEsk में आप bookshelf के index और memo pad में टाइप कर सकते हैं), volume नॉब के लिए PipeWire, brightness और lid handling के लिए logind, घड़ी के media page के लिए MPRIS, और lock screen के लिए PAM। इनमें से हर एक एक integration surface है, जिसे GNOME जैसा प्रोजेक्ट सैकड़ों contributors में बाँटता है। DEsk एक साफ़ रेखा खींचता है, “वह क्या बनाता है और क्या उधार लेता है”, और networking, Bluetooth, printing और दूसरे ऐप्स की theming को मौजूदा free software पर सौंपता है। यह उधार लेने की रणनीति ही वह तरीका है जिससे एक छोटी टीम पूरा desktop भेज सकती है, पर इसका मतलब है कि स्क्यूमॉर्फिक भ्रम किनारों पर अचानक रुक जाता है: Wi-Fi सेटिंग्स किसी और का flat GTK panel है।
जिन्हें इसे आज़माने का मन है, उनके लिए ध्यान देने लायक बात: क्योंकि कमरा स्क्रीन साइज़ के हिसाब से cache होता है और डायनामिक layer सादा GLES 3 forward rendering है, स्थिर-अवस्था की लागत सामान्य होनी चाहिए, भारी effects वाले किसी भी compositor जैसी। दर्द के बिंदु हैं GPU-रहित मशीनों पर लॉगिन-समय का ट्रेस (CPU फ़ॉलबैक है, और वह धीमा है) और v0.1 beta की सामान्य खुरदरापन। समीक्षकों ने Control Panel के power key जैसे stateful controls पर असंगत animations की रिपोर्ट की है। स्क्यूमॉर्फिक UI में यह कोई सौंदर्य-दोष नहीं है। जब key-turn animation गलत चलता है, तो आप नहीं बता सकते कि मशीन सच में बंद होगी या नहीं। स्क्यूमॉर्फिज़्म animation की सटीकता के दाँव बढ़ा देता है, क्योंकि animation ही state indicator है। फ्लैट डिज़ाइन का बड़ा, अनदेखा गुण यह है कि toggle switch के बस दो drawable states होते हैं और उनके बीच कुछ नहीं।
हमने ऐसा बनाना क्यों छोड़ा
प्रचलित इतिहास कहता है कि स्क्यूमॉर्फिज़्म एक बैसाखी था, यानी लोगों को टचस्क्रीन सिखाने के लिए असली-लगने वाले रूपक, और जब उपयोगकर्ता बड़े हो गए, तो हमने चमड़े की सिलाई फेंक दी। यह कहानी ज़्यादातर गलत है, और DEsk इसलिए उपयोगी है क्योंकि वह असली अर्थशास्त्र उजागर करता है। स्क्यूमॉर्फिज़्म दो चीज़ों के एक साथ होने पर मरा: Retina displays ने पिक्सल की संख्या चार गुना कर दी, जिन्हें हाथ से बनी textures को कवर करना था, और मोबाइल ने UI को सीमित GPUs पर चलाया जो बैटरी से चलते थे। फ्लैट vector UI मुफ़्त में स्केल होता है; 1x, 2x और 3x पर brushed-metal texture ऐसा नहीं करती। Apple का iOS 7 redesign स्वाद का विकास नहीं था; वह रेंडरिंग बजट में भारी कटौती थी। अगर आपने पढ़ा है कि GPU-accelerated terminals TTY glyph grids से पूरी shader pipelines तक कैसे पहुँचे, तो आपने वही व्यापार दूसरी दिशा से देखा है। हम किसी ऐप की सामग्री के भीतर GPU खुलकर खर्च करते हैं, पर chrome खुद डाइट पर चला गया।
एक गहरा कारण भी है जिसका GPU से कोई लेना-देना नहीं: consistency compose नहीं होती। एक डिज़ाइनर एक शानदार भौतिक रूपक बना सकता है; एक हज़ार third-party developers नहीं बना सकते। Bookshelf रूपक DEsk के अपने ऐप्स के लिए काम करता है। जिस पल Firefox कागज़ पर अपना flat grey UI रेंडर करता है, आप एक स्क्रीनशॉट देख रहे होते हैं जो प्रॉप पर चिपका हो। Hacker News thread ने इसे दो तरफ़ से एक साथ पकड़ा: एक टिप्पणीकार GTK2 के themeable दौर को याद कर रहा था, दूसरा बता रहा था कि आधुनिक toolkits “themes का विरोध करने के लिए डिज़ाइन किए लगते हैं”। Desktop मेज़ बन सकता है; ऐप्स कभी नहीं बनेंगे। रूपक रिसता है, और हर कोई जिसने theme वाला environment बनाया है जानता है कि यह रिसाव भ्रम के लिए घातक है। यही अंतर UX anti-patterns को इतना टिकाऊ बनाता है: सतह ठीक करना आसान है, पूरा ecosystem नहीं।
जहाँ विरोधी दावा टूटता है
मैंने कहा कि स्क्यूमॉर्फिज़्म अर्थशास्त्र की वजह से हारा, और मैं इस पर विश्वास करता हूँ। पर ईमानदारी के लिए रियायतें ज़रूरी हैं, और DEsk की अपनी खुरदरी कोरें वही रियायतें देती हैं।
पहली बात, कुछ लागत बिल्कुल भी रेंडरिंग की नहीं है। वह इंटरैक्शन की अस्पष्टता है। भौतिक रूपक उपयोगकर्ता की असली दुनिया की उम्मीदें उधार लेता है, और भौतिकी में undo नहीं होता। जब विंडो बंद करना “गेंद बनाकर फेंकना” हो, तो वह एक बार मज़ेदार लगता है, और चालीसवीं बार, जब आप गलती से गलत विंडो बंद कर देते हैं, थोड़ा डराता है। फ्लैट chrome की अमूर्तता एक फ़ीचर है: छोटा × एक वादा है, प्रदर्शन नहीं। दूसरी बात, स्टेटफुलनेस। भौतिक वस्तुएँ हमेशा वैसी ही दिखनी चाहिए जैसी वे हैं। अटकी हुई key-turn animation एक जर्जर transition नहीं है, वह इस बारे में झूठ है कि मशीन बंद होगी या नहीं। स्क्यूमॉर्फिक UI को उन जगहों पर सही होना पड़ता है जहाँ फ्लैट UI अनुमान पर चल सकता है, और animation की सटीकता QA समय में बेरहमी से महंगी है। जिन्होंने ऐसे सिस्टम शिप किए हैं जहाँ UI को वितरित state को ईमानदारी से दिखाना होता है, वे यह अच्छी तरह जानते हैं।
फ्लैट डिज़ाइन का बड़ा, अनदेखा गुण यह है कि toggle switch के बस दो drawable states होते हैं और बीच में कुछ नहीं। पीतल की चाबी के असंख्य states होते हैं, और उनमें से हर एक एक bug report है।
तीसरी बात, accessibility और discoverability दोनों तरफ़ काम करती हैं। कई टिप्पणीकारों ने सुझाया कि शाब्दिक desk रूपक बुज़ुर्ग उपयोगकर्ताओं की वास्तव में मदद कर सकता है, जिन्होंने file systems का मानसिक मॉडल कभी नहीं बनाया। वे रटकर सीखते हैं कि कहाँ क्लिक करना है, और जब वह बदलता है तो वापस नहीं संभल पाते, क्योंकि flat UI “उनके लिए कोई अंतर्निहित तर्क नहीं रखता”। डेस्क में तर्क है: चिट्ठियाँ पोस्ट बॉक्स में जाती हैं, दस्तावेज़ कागज़ हैं, जो रखना है वह दराज़ में जाता है। यह एक असली तर्क है, और इसे नॉस्टेल्जिया कहकर खारिज करना आलस्य है। पर वही भौतिकता एक उपयोगकर्ता से कार्यक्षमता छिपा भी देती है: आप कैसे पता करेंगे कि Super+D दराज़ खोलता है, या कि मुड़ी हुई विंडो उसमें जा सकती है? भौतिक affordances तब काम करते हैं जब वस्तुएँ हाथ में हों। कीबोर्ड शॉर्टकट दोनों ही सूरतों में शुद्ध सीखा हुआ अमूर्तन हैं।

DEsk असल में किसके लिए है
DEsk को यह प्रस्ताव समझना गलती होगी कि अब हम सब ray-traced डेस्क पर काम करें। ऐसा नहीं होगा, और जिस अर्थशास्त्र से मैंने शुरुआत की, वह अब भी कायम है: अरबों डिवाइस पर शिप करने वाला प्लेटफ़ॉर्म vendor chrome पर per-pixel material shaders, हाथ से ट्यून की गई लैंप रोशनी और animation-सटीक पीतल की चाबियाँ अफ़ोर्ड नहीं कर सकता। जैसे पुलों के लिए कंक्रीट सही डिफ़ॉल्ट है, वैसे ही system software के लिए फ्लैट डिज़ाइन सही डिफ़ॉल्ट बना रहता है।
DEsk वास्तव में जो दिखाता है, वह कुछ ऐसा है जिसे Linux desktop को एक दशक से साबित करने की ज़रूरत थी: compositor की परत अब इतनी अभिव्यंजक है कि वह एक माध्यम बन सके। Wayland और आधुनिक GPU एक समर्पित developer को पूरे फ्रेम का कैनवास देते हैं, जिसमें एक सुसंगत दुनिया रेंडर करने की पर्याप्त गुंजाइश है, सिर्फ़ आयतें सजाने की नहीं। Myst-युग की चाल, यानी महँगी रोशनी बेक करो और डायनामिक layer forward-render करो, वह प्रदर्शन का अंतर पाट देती है जिसने इसे पहले असंभव बनाया था। कोई अपनी दुनिया बनाए, चाहे वह नॉस्टेल्जिक अखरोट की मेज़ हो, वह Nostromo का फ़्लाइट डेक हो जिसका एक टिप्पणीकार ने सपना देखा था, या कुछ ऐसा जो किसी ने अब तक नहीं सोचा, यह स्वाद की बात है। असली खबर क्षमता है।
कंप्यूटिंग में एक पैटर्न बार-बार दिखता है: तकनीक परिपक्व होती है, मुख्यधारा सबसे सस्ती पर्याप्त सौंदर्यशैली पर एकमत हो जाती है, और फिर hobbyists महँगी सौंदर्यशैलियों को शिल्प के रूप में फिर से खोजते हैं। यह यांत्रिक कीबोर्ड के साथ हुआ, एक-बिट dithered कला के साथ हुआ, और emulators में CRT shaders के साथ हुआ। स्क्यूमॉर्फिक desktops इस कतार में अगले हैं। वे कुछ भी विस्थापित नहीं करेंगे। वे बस हमें याद दिलाएँगे, जैसे DEsk का एक डेस्क लैंप पूरे ray-traced कमरे को रोशन करता है, कि सपाट धूसर आयत हमेशा से एक बजट का फ़ैसला था, और बजट, स्वादों के विपरीत, बहस किए जा सकते हैं।


