desktop revision 1.6
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