desktop revision 1.2
11.2Sleot$NetBSD: desktop,v 1.2 2017/01/13 10:41:16 leot 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.2Sleotleast some of it committed, but this still (as of January 2017) 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