Phoenix - Zig में शुरू से नया लिखा गया आधुनिक X server
(git.dec05eba.com)- Phoenix मौजूदा Xorg को fork किए बिना Zig भाषा में शुरू से लिखा गया नया X server है, जिसका लक्ष्य एक आधुनिक विकल्प बनना है
- फिलहाल यह GLX, EGL, Vulkan graphics इस्तेमाल करने वाले सरल applications को मौजूदा X server के भीतर nested mode में चला सकता है, लेकिन standalone execution अभी supported नहीं है
- सरलता के लिए यह पिछले 20 सालों में लिखे गए applications और पिछले 15 सालों के hardware को ही support करता है, और server driver interface के बिना काम करता है
- security बढ़ाने के लिए protocol messages को अपने-आप parse करता है, और applications के बीच access को permission request-आधारित isolation structure से सीमित करता है
- HDR, VRR, multi-monitor, built-in compositor जैसी आधुनिक technologies को support करता है, और Wayland compatibility तथा X11 protocol extension की भी योजना है
Phoenix का परिचय
- Phoenix Xorg server को replace करने के लिए बनाया गया एक आधुनिक X server है, जो Zig भाषा में पूरी तरह से शुरू से लिखा गया implementation है
- यह Xorg का fork नहीं है, और ज़्यादा सरल व सुरक्षित architecture को लक्ष्य बनाता है
- फिलहाल यह पूरी तरह production-ready चरण में नहीं है, और मौजूदा X server के अंदर nested execution (nested mode) ही support करता है
- यह GLX, EGL, Vulkan आधारित hardware-accelerated rendering कर सकता है
लक्ष्य
सरलता
- Xorg से अधिक सरल server, जो X11 protocol का केवल कुछ हिस्सा support करता है
- इसमें सिर्फ वही features शामिल हैं जो पिछले 20 सालों में लिखे गए applications को चाहिए
- यह Linux DRM और Mesa GBM support करने वाले पिछले 15 सालों के hardware को target करता है
- Xorg की तरह अलग server driver interface का इस्तेमाल नहीं करता
- इसकी संरचना Wayland compositor जैसी है
सुरक्षा
- protocol messages का automatic parsing करके safety सुनिश्चित की जाती है
- Zig के
ReleaseSafebuild option के जरिए array index overflow जैसी अवैध गतिविधियों का अपने-आप पता लगाया जाता है
- Zig के
- default रूप से applications एक-दूसरे से isolate होकर चलती हैं
- दूसरे apps के साथ interaction केवल GUI permission request या पहले से दी गई permission के जरिए ही संभव है
- उदाहरण: screen recording app केवल चुनी गई window को ही record कर सकती है
- access restriction होने पर client को error की जगह dummy data मिलता है
- global shortcuts तभी काम करते हैं जब उनमें modifier keys (ctrl, shift आदि) शामिल हों
- modifier key के बिना global shortcut इस्तेमाल करने पर explicit permission चाहिए
- option के जरिए इसे Xorg जैसा ही behavior देने के लिए बदला जा सकता है
आधुनिक तकनीक support
- multi-monitor, अलग-अलग refresh rates, VRR, HDR जैसी आधुनिक display technologies का support
- एक single framebuffer की जगह हर display को अलग से handle किया जाता है
graphics processing में सुधार
- default रूप से tearing-free rendering और built-in compositor उपलब्ध
- external compositor (जैसे picom) चलने पर यह अपने-आप disable हो जाता है
- अगर fullscreen app vsync बंद कर दे, तो उसी app के हिसाब से behavior adjust किया जाता है
- vsync और compositor latency कम करना लक्ष्य है
नए standards
- प्रति-monitor DPI property (randr property) को define और document करने की योजना
- applications monitor-specific DPI के अनुसार content scaling कर सकती हैं
X11 protocol extension
- HDR जैसी नई features की जरूरत होने पर X11 protocol extension जोड़े जाएंगे
Wayland compatibility
- यह मानकर चला गया है कि कुछ apps केवल Wayland के लिए हो सकती हैं
- Phoenix Wayland को सीधे support कर सकता है, या Wayland–X11 bridge (जैसे 12to11) के जरिए चल सकता है
nested display server
- X11 या Wayland के अंदर hardware-accelerated nested execution संभव
- Phoenix की debugging और window manager/compositor testing के लिए उपयोगी
- Wayland environment में Xwayland alternative server के रूप में इस्तेमाल किया जा सकता है
non-goals
- Xorg server को पूरी तरह replace करना इसका लक्ष्य नहीं है
- Xorg अधिक X11 features और पुराने hardware support को बनाए रखेगा
- कई X11 screens support नहीं किए जाते हैं (सिर्फ multi-monitor support है)
- GrabServer call का कोई असर नहीं होगा
- endian-swap client/server को जरूरत पड़ने पर फिर से देखा जाएगा
- indirect GLX (remote rendering) support नहीं है
- इसकी complexity ज्यादा है, और remote streaming अधिक efficient है
- जरूरत होने पर GLX proxy के जरिए remote rendering संभव है
X11 protocol से अंतर
- font-related features सहित X11 core protocol के कुछ हिस्से अभी implement नहीं किए गए हैं
- string encoding default रूप से UTF-8 इस्तेमाल करती है
- लेकिन protocol में जहां ISO Latin-1 स्पष्ट रूप से निर्दिष्ट है, वहां अपवाद रहेगा
installation और build
- install command:
zig build -Doptimize=ReleaseSafe sudo zig build install -p /usr/local -Doptimize=ReleaseSafe - uninstall के लिए
/usr/local/bin/phoenixको manually delete करना होगा - development build:
zig build- output binary:
./zig-out/bin/phoenix - run और build एक साथ किया जा सकता है:
zig build run
- output binary:
X11 protocol documentation generation
- command:
zig build -Dgenerate-docs=true- output:
./zig-out/protocol/में.txtfiles बनती हैं - यह official documentation style में auto-generated docs हैं, और यह feature अभी प्रगति में है
- output:
dependencies
- Zig 0.14.1
- x11 (xcb) — X11 nested mode के लिए (
-Dbackends=x11) - wayland (wayland-client, wayland-egl) — Wayland nested mode के लिए (
-Dbackends=wayland, फिलहाल unsupported) - drm (libdrm, gbm) — standalone execution के लिए (
-Dbackends=drm, फिलहाल unsupported) - OpenGL (libglvnd) —
glऔरeglप्रदान करता है
1 टिप्पणियां
Hacker News की राय
X सर्वर को Wayland-स्टाइल में फिर से बनाने का तरीका दिलचस्प है
डिस्प्ले सर्वर और compositor को मूल रूप से एकीकृत करना, ऐप्स को डिफ़ॉल्ट रूप से isolate करना, GLX remote फ़ीचर्स को हटाना, और पुराने प्रोटोकॉल को साहसपूर्वक छोड़ना प्रभावशाली है
यह किसे चाहिए होगा, पता नहीं, लेकिन यह चुनाव काफ़ी तर्कसंगत लगता है
तब फ़र्क क्या है, समझ नहीं आता। शायद विश्लेषण अपूर्ण रहा हो
और अगर Wayland ऐप्स भी चलें, तो वास्तव में और ज़्यादा यूज़र इसे चुन सकते हैं
Phoenix नाम का बहुत ज़्यादा इस्तेमाल हो रहा है
Elixir framework में भी Phoenix है, और दूसरे प्रोजेक्ट्स में भी यह नाम कई बार देखा है
यह ‘Apollo’ जैसा आम नाम है, इसलिए मेरा मानना है कि नया प्रोजेक्ट बनाते समय पहले खोज लेना चाहिए
वहाँ bandit, cowboy, thousand island, ranch, mint, finch जैसे अलग-अलग नाम बहुत हैं
ExThing, ThingEx, Thingx जैसे नामों की टक्कर भी आम है, इसलिए कौन-सा standard है, यह समझना मुश्किल हो जाता है
1980 के दशक में भी इस तरह नए software के नाम रखे जाते थे, ऐसा याद है
wxPython में भी Phoenix प्रोजेक्ट है। नाम अच्छा है, लेकिन बहुत आम है
यह प्रोजेक्ट सच में बहुत शानदार है
मुझे Wayland पसंद है, लेकिन portal protocol और extension mechanism अब भी निराश करते हैं
productivity के मामले में Windows या macOS की तुलना में कुछ कमी है
built-in security के साथ X11 rewrite एक उम्मीद जगाने वाला तरीका है
यह उपयोगी प्रोजेक्ट लगता है, और उम्मीद है आगे बढ़ेगा
2000 के शुरुआती दशक में इन्हें install करना भी मुश्किल था, और आम यूज़र के लिए खुद install करना लगभग असंभव था
Linux distros install करने में कहीं आसान थे, और Windows धीमा होने पर नया PC खरीदने की नौबत भी उसी वजह से आती थी
मैं दफ़्तर में भी GNOME + Wayland के साथ बिना समस्या काम कर रहा हूँ
इस तरह के X संरक्षण प्रोजेक्ट देखकर अच्छा लगता है
मैं Wayland को पसंद करता हूँ, लेकिन अब भी मानता हूँ कि कुछ क्षेत्रों में X की ज़रूरत है
नई development टीमों को यह बोझ बाँटना चाहिए
X11 को अब पूरी तरह छोड़कर एक ही display server पर ध्यान देना चाहिए
यह प्रोजेक्ट कितना अच्छा चलेगा, पता नहीं, लेकिन
corporate-केंद्रित एकरूपता की धारा (जैसे Wayland, GNOME, KDE के paid developers) के मुक़ाबले
प्रतिस्पर्धी प्रोजेक्ट्स बढ़ना अच्छी बात है
यह भी जानना दिलचस्प होगा कि Xorg को modernize करने के लिए कितनी funding चाहिए
Wayland 2008 में आया था, लेकिन लगभग 20 साल बाद भी यह यूज़र्स की सभी ज़रूरतें पूरी नहीं कर पाया
corporate की चाही हुई संकीर्ण spec के हिसाब से ढालने की कोशिश में इसकी सीमाएँ साफ़ दिखती हैं
application developers build script में
zig build --releaseजैसी शक्ल मेंrelease mode तय कर सकते हैं
यूज़र चाहें तो खुद
--releaseदे सकते हैंलगता है Phoenix के लेखक ने ReleaseSafe mode को आधिकारिक release के रूप में चुना है
वैसे Phoenix मेरे hometown का नाम भी है
उसी लेखक का gpu-screen-recorder
Wayland पर इस्तेमाल किया गया सबसे अच्छा screen recorder है
4K 60fps recording भी बिना किसी खास सेटिंग के तुरंत चल गई
जानना है कि xterm, emacs, xfig, ghostview जैसे मौजूदा X11 apps चलते हैं या नहीं
उनके ठीक से चलने की संभावना कम है, लेकिन implementation खुद सरल है
multi-screen support को non-goal कहा गया है,
तो क्या इसका मतलब है कि virtual desktop support वाले window manager (जैसे i3) के साथ इसका इस्तेमाल नहीं हो सकेगा?
multi-monitor या virtual desktop इस्तेमाल करने में समस्या नहीं होगी
यह दिलचस्प है कि Xorg की तरह XML protocol spec को code generation के लिए इस्तेमाल नहीं किया जाता