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