11.6Sgutterid$NetBSD: desktop,v 1.6 2022/01/15 19:38:05 gutteridge Exp $ 21.1Sdholland 31.1SdhollandNetBSD Desktop Roadmap 41.1Sdholland====================== 51.1Sdholland 61.1SdhollandThis roadmap deals with desktop support. Note that "desktop support" 71.1Sdhollandmeans several quite different things: 81.1Sdholland - issues pertaining to running the Windows-like Linux desktops 91.6Sgutterid (e.g., GNOME, KDE, MATE, Xfce, LXQt, LXDE, DeforaOS, as well as 101.6Sgutterid others not presently successfully packaged, like Cinnamon, Lumina, 111.6Sgutterid and Trinity) on NetBSD in more or less their current form; 121.1Sdholland - issues pertaining to running these systems with NetBSD 131.1Sdholland infrastructure, for better system integration and to avoid 141.1Sdholland depending on unpopular packages like dbus and policykit; 151.1Sdholland - issues specific to developer-oriented desktops; 161.1Sdholland - other issues pertaining to using a NetBSD machine as one's desktop 171.1Sdholland login system, regardless of the UI; 181.1Sdholland - issues pertaining to running or developing a more Unix-oriented 191.1Sdholland desktop environment, which is kind of blue-sky for the time being. 201.1Sdholland 211.1SdhollandAlso, "desktop support" and "laptop support" are closely related in 221.1Sdhollandthe sense that in the conventional wisdom laptops run more or less the 231.1Sdhollandsame user-facing software as desktops. Additional specifically laptop- 241.1Sdhollandrelated issues, such as power management, are discussed in the 251.1Sdholland"mobile" roadmap (q.v.). 261.1Sdholland 271.1SdhollandFurthermore, many of the above issues can be ~orthogonally divided 281.1Sdhollandinto one of the following three broad categories: 291.1Sdholland 301.1Sdholland a. Providing new infrastructure for supporting facilities whose 311.1Sdholland needs are reasonably well understood but are not traditionally 321.1Sdholland handled by Unix and/or are not currently handled by NetBSD, or 331.1Sdholland where traditional/existing support is chronically defective. 341.1Sdholland Examples include font management, printing, mounting removable 351.1Sdholland media, and also things like support for location services. 361.1Sdholland 371.1Sdholland b. Providing new infrastructure for supporting facilities whose 381.1Sdholland needs are not in fact well understood. This tends to cover the 391.1Sdholland domains where we don't like the GNOME/KDE/Linux tools, like 401.1Sdholland dbus, as well as things that existing desktop environments fall 411.1Sdholland down on entirely, like integrating with large home directory 421.1Sdholland trees. 431.1Sdholland 441.1Sdholland c. Refactoring existing infrastructure (whether NetBSD-specific or 451.1Sdholland historical Unix) to integrate new facilities and software models 461.1Sdholland smoothly instead of bolting layers of crud on top of outdated 471.1Sdholland structure. Examples include revisiting the assumption that 481.1Sdholland logins happen on teletypes, and facing the need to restrict the 491.1Sdholland access of large applications rather than giving them all the 501.1Sdholland privileges of the user starting them. 511.1Sdholland 521.1Sdholland 531.1SdhollandThe following elements, projects, and goals are relatively near-term: 541.1Sdholland 551.6Sgutterid 1. Making removable media work using GNOME/KDE infrastructure 561.6Sgutterid 2. Making wireless config work using GNOME/KDE infrastructure 571.6Sgutterid 3. Sane font handling 581.6Sgutterid 4. Get Eclipse running properly from pkgsrc 591.6Sgutterid 5. Better printer management 601.6Sgutterid 6. Work out a long-term plan for compositing, Wayland, and graphics 611.1Sdholland architecture issues 621.1Sdholland 631.1SdhollandThe following elements, projects, and goals are longer-term: 641.1Sdholland 651.6Sgutterid 7. Publish/subscribe sockets or IPC 661.6Sgutterid 8. Better native RPC library and tools 671.6Sgutterid 9. Native removable media handling 681.6Sgutterid 10. Native wireless config 691.6Sgutterid 11. User switching and secure attention key 701.6Sgutterid 12. wscons graphics 711.1Sdholland 721.1SdhollandThe following elements, projects, and goals are rather blue-sky so far: 731.1Sdholland 741.6Sgutterid 13. Something akin to ARexx 751.6Sgutterid 14. A more Unix-oriented root window/desktop basis 761.6Sgutterid 15. Full console virtualization 771.1Sdholland 781.1Sdholland 791.1SdhollandExplanations 801.1Sdholland============ 811.1Sdholland 821.1Sdholland 831.6Sgutterid 1. Making removable media work using GNOME/KDE infrastructure 841.1Sdholland 851.1SdhollandIdeally when you insert a USB stick it mounts automatically, like with 861.1SdhollandGNOME and KDE on Linux. I believe this is not currently working. It 871.1Sdhollandused to depend on hal, which was always problematic and perennially 881.1Sdhollandbroken, but hal got deprecated and I'm not sure what is even involved. 891.1Sdholland(XXX: someone please clarify.) 901.1Sdholland 911.1Sdholland 921.6Sgutterid 2. Making wireless config work using GNOME/KDE infrastructure 931.1Sdholland 941.1SdhollandIdeally it would be possible to configure your wireless networking 951.1Sdhollandusing the GNOME/KDE/etc. tools. I believe this does not work either. 961.1Sdholland(XXX: someone please clarify.) 971.1Sdholland 981.1Sdholland 991.6Sgutterid 3. Sane font handling 1001.1Sdholland 1011.1SdhollandSee "System-level font handling in Unix" on the wiki projects page. 1021.1Sdholland 1031.1Sdholland - As of January 2017 nobody is actively working on this. 1041.1Sdholland - There is currently no clear timeframe or release target. 1051.1Sdholland - Contact: dholland 1061.1Sdholland 1071.1Sdholland 1081.6Sgutterid 4. Get Eclipse running properly from pkgsrc 1091.1Sdholland 1101.1SdhollandAs of last report Eclipse was bodgily packaged (this may not be 1111.1Sdhollandfixable) and didn't really work (this should be). Because Eclipse is 1121.1SdhollandJava this depends on JDK stuff. 1131.1Sdholland 1141.1Sdholland - As of January 2017 nobody is actively working on this. 1151.1Sdholland - There is currently no clear timeframe or release target. 1161.1Sdholland - Contact: ? (XXX) 1171.1Sdholland 1181.1Sdholland 1191.6Sgutterid 5. Better printer management 1201.1Sdholland 1211.1SdhollandSee "New LPR/LPD for NetBSD" on the wiki projects page. 1221.1Sdholland 1231.1Sdholland - As of January 2017 nobody is actively working on this. 1241.1Sdholland - There is currently no clear timeframe or release target. 1251.1Sdholland - Contact: dholland 1261.1Sdholland 1271.1Sdholland 1281.6Sgutterid 6. Work out a long-term plan for compositing, Wayland, and graphics 1291.1Sdholland architecture issues 1301.1Sdholland 1311.1SdhollandNobody seems to have a good idea of what the way forward ought to be, 1321.1Sdhollandso probably it would be advisable for someone to dig into the issues 1331.1Sdhollandand report back. 1341.1Sdholland 1351.1Sdholland - As of January 2017 nobody is actively working on this. 1361.1Sdholland - There is currently no clear timeframe or release target. 1371.1Sdholland - Contact: ? (XXX) 1381.1Sdholland 1391.1Sdholland 1401.6Sgutterid 7. Publish/subscribe sockets or IPC 1411.1Sdholland 1421.1SdhollandIt's clear that even though traditionally Unix has next to no such 1431.1Sdhollandfacilities, a "modern" desktop system requires the ability to post 1441.1Sdhollandnotices about from one component to another. (Probably the closest 1451.1Sdhollandthing traditional Unix ever had along these lines was comsat(8).) 1461.1Sdholland 1471.1Sdhollanddholland observed some time back that there isn't really a problem if 1481.1Sdhollandwhat you want to do is contact a well-known service: we have inetd for 1491.1Sdhollandthat, and while inetd could use some polishing before being deployed 1501.1Sdhollandfor such purposes that isn't a very big deal. The interesting case is 1511.1Sdhollandmulticast: when you want to send a notice to anyone who happens to be 1521.1Sdhollandaround and interested in seeing notices of some particular type, 1531.1Sdhollandwithout needing to know who they are. 1541.1Sdholland 1551.1Sdhollanddbus does this badly, both because the implementation is poor and 1561.1Sdhollandbecause the basic concept of a "message bus" is flawed. A better model 1571.1Sdhollandis publish-subscribe channels: a message sent ("published") on the 1581.1Sdhollandchannel is delivered to all listeners ("subscribers"), and neither the 1591.1Sdhollandpublishers nor the subscribers need to know about one another, only 1601.1Sdhollandabout the existence of the channel... which becomes effectively a well 1611.1Sdhollandknown service. 1621.1Sdholland 1631.1SdhollandThe original (very tentative) plan was to wedge publish/subscribe into 1641.1SdhollandAF_UNIX sockets, because AF_UNIX sockets already satisfy several 1651.1Sdhollandimportant criteria: (1) they have a large and flexible namespace, 1661.1Sdhollandnamely the whole file system namespace; (2) they support credential 1671.1Sdhollandreporting; (3) the socket/bind/listen/connect API (probably) provides 1681.1Sdhollandenough flexibility to handle the connection model; and (4) they 1691.1Sdhollandalready exist. However, nobody has yet looked into this very closely 1701.1Sdhollandand the interface may not turn out to be very suitable after all. 1711.1Sdholland 1721.1SdhollandNote that (like anything of this sort) the naming scheme for the 1731.1Sdhollandchannels is critical, as is the development of sane protocols to run 1741.1Sdhollandover them. Note that the publish/subscribe sockets should be transport 1751.1Sdhollandonly; protocols should be a higher-level issue. (This is one of a 1761.1Sdhollandnumber of things dbus gets wrong.) 1771.1Sdholland 1781.1SdhollandOne of the other things this infrastructure should provide is a decent 1791.1Sdhollandway to post notices (e.g. for media changes, device insertions, and so 1801.1Sdhollandon) out of the kernel, which has historically always been a problem in 1811.1SdhollandUnix. 1821.1Sdholland 1831.1SdhollandThis item is sometimes also referred to as "dbus avoidance" - 1841.1Sdhollandtheoretically one could avoid dbus with some other architecture too, 1851.1Sdhollandbut nothing much else has been proposed. 1861.1Sdholland 1871.1SdhollandAn example application we already have in base is the notices that 1881.1Sdhollandsshd sends to blacklistd. Currently this makes a mess if sshd is 1891.1Sdhollandrunning and blacklistd isn't. 1901.1Sdholland 1911.1Sdholland - As of January 2017 nobody is actively working on this. 1921.1Sdholland - There is currently no timeframe or release target. 1931.1Sdholland - Contact: dholland 1941.1Sdholland 1951.1Sdholland 1961.6Sgutterid 8. Better native RPC library and tools 1971.1Sdholland 1981.1SdhollandAnother thing dbus doesn't do very well: it's an IPC/RPC library. In 1991.1Sdhollandthe long run to support existing desktops we probably need 2001.1Sdhollanddbus-compatible IPC tools. In the short run though we'd do well to 2011.1Sdhollandpick or develop something of our own, and (finally) deprecate SunRPC. 2021.1Sdholland 2031.1Sdholland - As of January 2017 nobody is actively working on this. 2041.1Sdholland - There is currently no timeframe or release target. 2051.1Sdholland - Contact: dholland or ? (XXX) 2061.1Sdholland 2071.1Sdholland 2081.6Sgutterid 9. Native removable media handling 2091.1Sdholland 2101.1SdhollandGiven publish/subscribe channels, implement proper native support for 2111.1Sdhollandmounting removable media upon insertion. This should integrate with 2121.1SdhollandGNOME/KDE/etc. but also work natively; e.g. provided the right 2131.1Sdhollandservices are running, it should work even when running on a text-only 2141.1Sdhollandconsole. 2151.1Sdholland 2161.1Sdholland 2171.6Sgutterid 10. Native wireless config 2181.1Sdholland 2191.1SdhollandSimilarly, implement a native wireless config scheme. While we 2201.1Sdhollandcurrently have wpa_cli, it lacks a certain something... 2211.1Sdholland 2221.1Sdholland 2231.6Sgutterid 11. User switching and secure attention key 2241.1Sdholland 2251.1SdhollandSee the project page on the wiki. 2261.1Sdholland 2271.1Sdholland - As of January 2017 nobody is actively working on this. 2281.1Sdholland - There is currently no timeframe or release target. 2291.1Sdholland - Contact: dholland or ? (XXX) 2301.1Sdholland 2311.1Sdholland 2321.6Sgutterid 12. wscons graphics 2331.1Sdholland 2341.1SdhollandThere's been talk on and off for some time about supporting cairo or 2351.1Sdhollandqt-embedded or similar things directly on the console. This is 2361.1Sdhollandprobably a good infrastructure step for any UI scheme that doesn't 2371.1Sdhollandinvolve an X server, such as potentially phones or tablets. (See the 2381.1Sdholland"mobile" roadmap for more on that.) 2391.1Sdholland 2401.1Sdholland 2411.6Sgutterid 13. Something akin to ARexx 2421.1Sdholland 2431.1SdhollandWe have a number of veteran Amiga users and whenever there's a 2441.1Sdhollanddiscussion of dbus usually ARexx eventually comes up. It would be 2451.1Sdhollandgreat to have something like ARexx for talking to/scripting/ 2461.1Sdhollandcontrolling applications. But given that GNOME and KDE and their 2471.1Sdhollandimitations are all based on Windows and that the state of the art 2481.1Sdhollandseems to be dbus, if we want this we're going to have to design and 2491.1Sdhollandbuild it out ourselves. It would be a good thing to do. 2501.1Sdholland 2511.1SdhollandJust remember that the good parts of ARexx didn't include the Rexx 2521.1Sdhollandlanguage. :-) 2531.1Sdholland 2541.1Sdholland - As of January 2017 nobody is actively working on this. 2551.1Sdholland - There is currently no timeframe or release target. 2561.1Sdholland - Contact: mlelstv? (XXX) 2571.1Sdholland 2581.1Sdholland 2591.6Sgutterid 14. A more Unix-oriented root window/desktop basis 2601.1Sdholland 2611.1SdhollandAll the existing desktops (apart from OS X, which is NextStep, but not 2621.1Sdhollandall that much different either) are based on Windows. They share a 2631.1Sdhollandnumber of properties that are not consistent with the Unix philosophy 2641.1Sdhollandor design model. 2651.1Sdholland 2661.3SleotFirst, Unix is about files, and like it or not, files in Unix are 2671.1Sdhollandorganized in a hierarchical namespace. The Windows-like desktops, like 2681.1SdhollandWindows, provide a file manager as an afterthought and the desktop 2691.1Sdhollandworkspace itself has no notion of current directory, no notion of 2701.1Sdhollanddirectory navigation, and only limited notions of interacting with 2711.1Sdhollandfiles at all. In fact, the things that show up on the desktop 2721.1Sdhollandtypically live in a reserved directory that the desktop software 2731.1Sdhollandinsists on polluting your homedir with. A Unix desktop should have 2741.1Sdhollanddirectory navigation integrated with the root window somehow -- there 2751.1Sdhollandare many possible ways to do this, and virtually any choice would be 2761.1Sdhollandbetter than what you get from GNOME and KDE. It shouldn't be necessary 2771.1Sdhollandto open a shell (or a "file manager") to work effectively with a large 2781.1Sdhollandsource tree. 2791.1Sdholland 2801.1SdhollandSecond, Unix is also about text, and existing desktop software is not. 2811.1SdhollandWhile people tend to think of GUIs and text as mutually exclusive, 2821.1Sdhollandthis is not actually the case: a GUI provides a lot of ways to place 2831.1Sdhollandand format text that can't be done in text mode (let alone on a 2841.1Sdhollandteletype) -- a good start, for example, might be to display the first 2851.1Sdhollandfew lines of a file when you roll the mouse over it, but one can go a 2861.1Sdhollandlot further than that. 2871.1Sdholland 2881.1SdhollandThird, Unix is supposed to be about pluggable components. A Unix 2891.1Sdhollanddesktop should have functionality for plugging components together 2901.1Sdhollandgraphically, whether those components are traditional shell tools or 2911.1Sdholland"services" or "objects" or more complex things. No existing desktop 2921.1Sdhollandhas anything like this, certainly not as native functionality. 2931.1Sdholland 2941.1SdhollandAnything like this is going to have to be designed and written, since 2951.1Sdhollandit's clearly not going to be forthcoming from the Linux desktop folks. 2961.1Sdholland(Note that while it would be a big effort it would also be a great 2971.1Sdhollandpublicity lever...) 2981.1Sdholland 2991.1Sdholland 3001.6Sgutterid 15. Full console virtualization 3011.1Sdholland 3021.1SdhollandThe Unix notion of a login session is stuck in the 70s, where you log 3031.1Sdhollandin on a glass teletype and that's all you get. The consoles of modern 3041.1Sdhollandcomputers have assorted other widgets as well: pointing devices, game 3051.1Sdhollandcontrollers, cameras, scanners, removable storage, hotkeys, audio 3061.1Sdhollandplayback and record... not to mention graphics and video. Right now we 3071.1Sdhollandhave a bodgy scheme for chowning or chmod'ing devices on console 3081.1Sdhollandlogin; in addition to potentially causing problems (what happens if 3091.1Sdhollandone user leaves a process behind that's recording audio, then logs out 3101.1Sdhollandand walks away?) this doesn't work well with multiple users logged in 3111.1Sdhollandat once on the console. It also doesn't work at all with remote logins. 3121.1Sdholland 3131.1SdhollandIn an ideal world, all your console hardware would be tied to your 3141.1Sdhollandconsole login session, and virtualized appropriately so that multiple 3151.1Sdhollandconsole logins each get suitably arbitrated access. Furthermore, it 3161.1Sdhollandshould be possible to forward your console hardware to a remote login 3171.1Sdhollandsession -- for example if you have a usb stick you should be able to 3181.1Sdhollandlog in somewhere and mount it there. 3191.1Sdholland 3201.1SdhollandGetting to this requires refactoring the way we think about logins and 3211.1Sdhollandlogin devices, but it's high time. 322