Home | History | Annotate | Line # | Download | only in roadmaps
desktop revision 1.3
      1  1.3      leot $NetBSD: desktop,v 1.3 2017/01/13 10:44:27 leot Exp $
      2  1.1  dholland 
      3  1.1  dholland NetBSD Desktop Roadmap
      4  1.1  dholland ======================
      5  1.1  dholland 
      6  1.1  dholland This roadmap deals with desktop support. Note that "desktop support"
      7  1.1  dholland means several quite different things:
      8  1.1  dholland    - issues pertaining to running the Windows-like Linux desktops
      9  1.1  dholland      (e.g. GNOME, KDE, Mate, Trinity, as well as other similar things
     10  1.1  dholland      like LXDE) on NetBSD in more or less their current form;
     11  1.1  dholland    - issues pertaining to running these systems with NetBSD
     12  1.1  dholland      infrastructure, for better system integration and to avoid
     13  1.1  dholland      depending on unpopular packages like dbus and policykit;
     14  1.1  dholland    - issues specific to developer-oriented desktops;
     15  1.1  dholland    - other issues pertaining to using a NetBSD machine as one's desktop
     16  1.1  dholland      login system, regardless of the UI;
     17  1.1  dholland    - issues pertaining to running or developing a more Unix-oriented
     18  1.1  dholland      desktop environment, which is kind of blue-sky for the time being.
     19  1.1  dholland 
     20  1.1  dholland Also, "desktop support" and "laptop support" are closely related in
     21  1.1  dholland the sense that in the conventional wisdom laptops run more or less the
     22  1.1  dholland same user-facing software as desktops. Additional specifically laptop-
     23  1.1  dholland related issues, such as power management, are discussed in the
     24  1.1  dholland "mobile" roadmap (q.v.).
     25  1.1  dholland 
     26  1.1  dholland Furthermore, many of the above issues can be ~orthogonally divided
     27  1.1  dholland into one of the following three broad categories:
     28  1.1  dholland 
     29  1.1  dholland    a. Providing new infrastructure for supporting facilities whose
     30  1.1  dholland       needs are reasonably well understood but are not traditionally
     31  1.1  dholland       handled by Unix and/or are not currently handled by NetBSD, or
     32  1.1  dholland       where traditional/existing support is chronically defective.
     33  1.1  dholland       Examples include font management, printing, mounting removable
     34  1.1  dholland       media, and also things like support for location services.
     35  1.1  dholland 
     36  1.1  dholland    b. Providing new infrastructure for supporting facilities whose
     37  1.1  dholland       needs are not in fact well understood. This tends to cover the
     38  1.1  dholland       domains where we don't like the GNOME/KDE/Linux tools, like
     39  1.1  dholland       dbus, as well as things that existing desktop environments fall
     40  1.1  dholland       down on entirely, like integrating with large home directory
     41  1.1  dholland       trees.
     42  1.1  dholland 
     43  1.1  dholland    c. Refactoring existing infrastructure (whether NetBSD-specific or
     44  1.1  dholland       historical Unix) to integrate new facilities and software models
     45  1.1  dholland       smoothly instead of bolting layers of crud on top of outdated
     46  1.1  dholland       structure. Examples include revisiting the assumption that
     47  1.1  dholland       logins happen on teletypes, and facing the need to restrict the
     48  1.1  dholland       access of large applications rather than giving them all the
     49  1.1  dholland       privileges of the user starting them.
     50  1.1  dholland 
     51  1.1  dholland 
     52  1.1  dholland The following elements, projects, and goals are relatively near-term:
     53  1.1  dholland 
     54  1.1  dholland  1. Don't ship twm as the default X window manager
     55  1.1  dholland  2. Making removable media work using GNOME/KDE infrastructure
     56  1.1  dholland  3. Making wireless config work using GNOME/KDE infrastructure
     57  1.1  dholland  4. Sane font handling
     58  1.1  dholland  5. Get Eclipse running properly from pkgsrc
     59  1.1  dholland  6. Better printer management
     60  1.1  dholland  7. Work out a long-term plan for compositing, Wayland, and graphics
     61  1.1  dholland     architecture issues
     62  1.1  dholland 
     63  1.1  dholland The following elements, projects, and goals are longer-term:
     64  1.1  dholland 
     65  1.1  dholland  8. Publish/subscribe sockets or IPC
     66  1.1  dholland  9. Better native RPC library and tools
     67  1.1  dholland  10. Native removable media handling
     68  1.1  dholland  11. Native wireless config
     69  1.1  dholland  12. User switching and secure attention key
     70  1.1  dholland  13. wscons graphics
     71  1.1  dholland 
     72  1.1  dholland The following elements, projects, and goals are rather blue-sky so far:
     73  1.1  dholland 
     74  1.1  dholland  14. Something akin to ARexx
     75  1.1  dholland  15. A more Unix-oriented root window/desktop basis 
     76  1.1  dholland  16. Full console virtualization
     77  1.1  dholland 
     78  1.1  dholland 
     79  1.1  dholland Explanations
     80  1.1  dholland ============
     81  1.1  dholland 
     82  1.1  dholland 
     83  1.1  dholland  1. Don't ship twm as the default X window manager
     84  1.1  dholland 
     85  1.1  dholland It's embarrassing that in 2016 we were still shipping twm as the
     86  1.1  dholland default window system config. Heck, it was embarrassing in 2006. The
     87  1.1  dholland work needed to move to ctwm has been largely done (by youri) and at
     88  1.2      leot least some of it committed, but this still (as of January 2017) isn't
     89  1.1  dholland enabled by default.
     90  1.1  dholland 
     91  1.1  dholland   - As of January 2017 nobody is actively working on this.
     92  1.1  dholland   - It would be silly at this point to release 8.0 without it, so
     93  1.1  dholland     ideally someone will step up to get it finished and enabled.
     94  1.1  dholland   - Contact: XXX please fill in
     95  1.1  dholland 
     96  1.1  dholland 
     97  1.1  dholland  2. Making removable media work using GNOME/KDE infrastructure
     98  1.1  dholland 
     99  1.1  dholland Ideally when you insert a USB stick it mounts automatically, like with
    100  1.1  dholland GNOME and KDE on Linux. I believe this is not currently working. It
    101  1.1  dholland used to depend on hal, which was always problematic and perennially
    102  1.1  dholland broken, but hal got deprecated and I'm not sure what is even involved.
    103  1.1  dholland (XXX: someone please clarify.)
    104  1.1  dholland 
    105  1.1  dholland 
    106  1.1  dholland  3. Making wireless config work using GNOME/KDE infrastructure
    107  1.1  dholland 
    108  1.1  dholland Ideally it would be possible to configure your wireless networking
    109  1.1  dholland using the GNOME/KDE/etc. tools. I believe this does not work either.
    110  1.1  dholland (XXX: someone please clarify.)
    111  1.1  dholland 
    112  1.1  dholland 
    113  1.1  dholland  4. Sane font handling
    114  1.1  dholland 
    115  1.1  dholland See "System-level font handling in Unix" on the wiki projects page.
    116  1.1  dholland 
    117  1.1  dholland   - As of January 2017 nobody is actively working on this.
    118  1.1  dholland   - There is currently no clear timeframe or release target.
    119  1.1  dholland   - Contact: dholland
    120  1.1  dholland 
    121  1.1  dholland 
    122  1.1  dholland  5. Get Eclipse running properly from pkgsrc
    123  1.1  dholland 
    124  1.1  dholland As of last report Eclipse was bodgily packaged (this may not be
    125  1.1  dholland fixable) and didn't really work (this should be). Because Eclipse is
    126  1.1  dholland Java this depends on JDK stuff.
    127  1.1  dholland 
    128  1.1  dholland   - As of January 2017 nobody is actively working on this.
    129  1.1  dholland   - There is currently no clear timeframe or release target.
    130  1.1  dholland   - Contact: ? (XXX)
    131  1.1  dholland 
    132  1.1  dholland 
    133  1.1  dholland  6. Better printer management
    134  1.1  dholland 
    135  1.1  dholland See "New LPR/LPD for NetBSD" on the wiki projects page.
    136  1.1  dholland 
    137  1.1  dholland   - As of January 2017 nobody is actively working on this.
    138  1.1  dholland   - There is currently no clear timeframe or release target.
    139  1.1  dholland   - Contact: dholland
    140  1.1  dholland 
    141  1.1  dholland 
    142  1.1  dholland  7. Work out a long-term plan for compositing, Wayland, and graphics
    143  1.1  dholland     architecture issues
    144  1.1  dholland 
    145  1.1  dholland Nobody seems to have a good idea of what the way forward ought to be,
    146  1.1  dholland so probably it would be advisable for someone to dig into the issues
    147  1.1  dholland and report back.
    148  1.1  dholland 
    149  1.1  dholland   - As of January 2017 nobody is actively working on this.
    150  1.1  dholland   - There is currently no clear timeframe or release target.
    151  1.1  dholland   - Contact: ? (XXX)
    152  1.1  dholland 
    153  1.1  dholland 
    154  1.1  dholland  8. Publish/subscribe sockets or IPC
    155  1.1  dholland 
    156  1.1  dholland It's clear that even though traditionally Unix has next to no such
    157  1.1  dholland facilities, a "modern" desktop system requires the ability to post
    158  1.1  dholland notices about from one component to another. (Probably the closest
    159  1.1  dholland thing traditional Unix ever had along these lines was comsat(8).)
    160  1.1  dholland 
    161  1.1  dholland dholland observed some time back that there isn't really a problem if
    162  1.1  dholland what you want to do is contact a well-known service: we have inetd for
    163  1.1  dholland that, and while inetd could use some polishing before being deployed
    164  1.1  dholland for such purposes that isn't a very big deal. The interesting case is
    165  1.1  dholland multicast: when you want to send a notice to anyone who happens to be
    166  1.1  dholland around and interested in seeing notices of some particular type,
    167  1.1  dholland without needing to know who they are.
    168  1.1  dholland 
    169  1.1  dholland dbus does this badly, both because the implementation is poor and
    170  1.1  dholland because the basic concept of a "message bus" is flawed. A better model
    171  1.1  dholland is publish-subscribe channels: a message sent ("published") on the
    172  1.1  dholland channel is delivered to all listeners ("subscribers"), and neither the
    173  1.1  dholland publishers nor the subscribers need to know about one another, only
    174  1.1  dholland about the existence of the channel... which becomes effectively a well
    175  1.1  dholland known service.
    176  1.1  dholland 
    177  1.1  dholland The original (very tentative) plan was to wedge publish/subscribe into
    178  1.1  dholland AF_UNIX sockets, because AF_UNIX sockets already satisfy several
    179  1.1  dholland important criteria: (1) they have a large and flexible namespace,
    180  1.1  dholland namely the whole file system namespace; (2) they support credential
    181  1.1  dholland reporting; (3) the socket/bind/listen/connect API (probably) provides
    182  1.1  dholland enough flexibility to handle the connection model; and (4) they
    183  1.1  dholland already exist. However, nobody has yet looked into this very closely
    184  1.1  dholland and the interface may not turn out to be very suitable after all.
    185  1.1  dholland 
    186  1.1  dholland Note that (like anything of this sort) the naming scheme for the
    187  1.1  dholland channels is critical, as is the development of sane protocols to run
    188  1.1  dholland over them. Note that the publish/subscribe sockets should be transport
    189  1.1  dholland only; protocols should be a higher-level issue. (This is one of a
    190  1.1  dholland number of things dbus gets wrong.)
    191  1.1  dholland 
    192  1.1  dholland One of the other things this infrastructure should provide is a decent
    193  1.1  dholland way to post notices (e.g. for media changes, device insertions, and so
    194  1.1  dholland on) out of the kernel, which has historically always been a problem in
    195  1.1  dholland Unix.
    196  1.1  dholland 
    197  1.1  dholland This item is sometimes also referred to as "dbus avoidance" -
    198  1.1  dholland theoretically one could avoid dbus with some other architecture too,
    199  1.1  dholland but nothing much else has been proposed.
    200  1.1  dholland 
    201  1.1  dholland An example application we already have in base is the notices that
    202  1.1  dholland sshd sends to blacklistd. Currently this makes a mess if sshd is
    203  1.1  dholland running and blacklistd isn't.
    204  1.1  dholland 
    205  1.1  dholland   - As of January 2017 nobody is actively working on this.
    206  1.1  dholland   - There is currently no timeframe or release target.
    207  1.1  dholland   - Contact: dholland
    208  1.1  dholland 
    209  1.1  dholland 
    210  1.1  dholland  9. Better native RPC library and tools
    211  1.1  dholland 
    212  1.1  dholland Another thing dbus doesn't do very well: it's an IPC/RPC library. In
    213  1.1  dholland the long run to support existing desktops we probably need
    214  1.1  dholland dbus-compatible IPC tools. In the short run though we'd do well to
    215  1.1  dholland pick or develop something of our own, and (finally) deprecate SunRPC.
    216  1.1  dholland 
    217  1.1  dholland   - As of January 2017 nobody is actively working on this.
    218  1.1  dholland   - There is currently no timeframe or release target.
    219  1.1  dholland   - Contact: dholland or ? (XXX)
    220  1.1  dholland 
    221  1.1  dholland 
    222  1.1  dholland  10. Native removable media handling
    223  1.1  dholland 
    224  1.1  dholland Given publish/subscribe channels, implement proper native support for
    225  1.1  dholland mounting removable media upon insertion. This should integrate with
    226  1.1  dholland GNOME/KDE/etc. but also work natively; e.g. provided the right
    227  1.1  dholland services are running, it should work even when running on a text-only
    228  1.1  dholland console.
    229  1.1  dholland 
    230  1.1  dholland 
    231  1.1  dholland  11. Native wireless config
    232  1.1  dholland 
    233  1.1  dholland Similarly, implement a native wireless config scheme. While we
    234  1.1  dholland currently have wpa_cli, it lacks a certain something...
    235  1.1  dholland 
    236  1.1  dholland 
    237  1.1  dholland  12. User switching and secure attention key
    238  1.1  dholland 
    239  1.1  dholland See the project page on the wiki.
    240  1.1  dholland 
    241  1.1  dholland   - As of January 2017 nobody is actively working on this.
    242  1.1  dholland   - There is currently no timeframe or release target.
    243  1.1  dholland   - Contact: dholland or ? (XXX)
    244  1.1  dholland 
    245  1.1  dholland 
    246  1.1  dholland  13. wscons graphics
    247  1.1  dholland 
    248  1.1  dholland There's been talk on and off for some time about supporting cairo or
    249  1.1  dholland qt-embedded or similar things directly on the console. This is
    250  1.1  dholland probably a good infrastructure step for any UI scheme that doesn't
    251  1.1  dholland involve an X server, such as potentially phones or tablets. (See the
    252  1.1  dholland "mobile" roadmap for more on that.)
    253  1.1  dholland 
    254  1.1  dholland 
    255  1.1  dholland  14. Something akin to ARexx
    256  1.1  dholland 
    257  1.1  dholland We have a number of veteran Amiga users and whenever there's a
    258  1.1  dholland discussion of dbus usually ARexx eventually comes up. It would be
    259  1.1  dholland great to have something like ARexx for talking to/scripting/
    260  1.1  dholland controlling applications. But given that GNOME and KDE and their
    261  1.1  dholland imitations are all based on Windows and that the state of the art
    262  1.1  dholland seems to be dbus, if we want this we're going to have to design and
    263  1.1  dholland build it out ourselves. It would be a good thing to do.
    264  1.1  dholland 
    265  1.1  dholland Just remember that the good parts of ARexx didn't include the Rexx
    266  1.1  dholland language. :-)
    267  1.1  dholland 
    268  1.1  dholland   - As of January 2017 nobody is actively working on this.
    269  1.1  dholland   - There is currently no timeframe or release target.
    270  1.1  dholland   - Contact: mlelstv? (XXX)
    271  1.1  dholland 
    272  1.1  dholland 
    273  1.1  dholland  15. A more Unix-oriented root window/desktop basis
    274  1.1  dholland 
    275  1.1  dholland All the existing desktops (apart from OS X, which is NextStep, but not
    276  1.1  dholland all that much different either) are based on Windows. They share a
    277  1.1  dholland number of properties that are not consistent with the Unix philosophy
    278  1.1  dholland or design model.
    279  1.1  dholland 
    280  1.3      leot First, Unix is about files, and like it or not, files in Unix are
    281  1.1  dholland organized in a hierarchical namespace. The Windows-like desktops, like
    282  1.1  dholland Windows, provide a file manager as an afterthought and the desktop
    283  1.1  dholland workspace itself has no notion of current directory, no notion of
    284  1.1  dholland directory navigation, and only limited notions of interacting with
    285  1.1  dholland files at all. In fact, the things that show up on the desktop
    286  1.1  dholland typically live in a reserved directory that the desktop software
    287  1.1  dholland insists on polluting your homedir with. A Unix desktop should have
    288  1.1  dholland directory navigation integrated with the root window somehow -- there
    289  1.1  dholland are many possible ways to do this, and virtually any choice would be
    290  1.1  dholland better than what you get from GNOME and KDE. It shouldn't be necessary
    291  1.1  dholland to open a shell (or a "file manager") to work effectively with a large
    292  1.1  dholland source tree.
    293  1.1  dholland 
    294  1.1  dholland Second, Unix is also about text, and existing desktop software is not.
    295  1.1  dholland While people tend to think of GUIs and text as mutually exclusive,
    296  1.1  dholland this is not actually the case: a GUI provides a lot of ways to place
    297  1.1  dholland and format text that can't be done in text mode (let alone on a
    298  1.1  dholland teletype) -- a good start, for example, might be to display the first
    299  1.1  dholland few lines of a file when you roll the mouse over it, but one can go a
    300  1.1  dholland lot further than that.
    301  1.1  dholland 
    302  1.1  dholland Third, Unix is supposed to be about pluggable components. A Unix
    303  1.1  dholland desktop should have functionality for plugging components together
    304  1.1  dholland graphically, whether those components are traditional shell tools or
    305  1.1  dholland "services" or "objects" or more complex things. No existing desktop
    306  1.1  dholland has anything like this, certainly not as native functionality.
    307  1.1  dholland 
    308  1.1  dholland Anything like this is going to have to be designed and written, since
    309  1.1  dholland it's clearly not going to be forthcoming from the Linux desktop folks.
    310  1.1  dholland (Note that while it would be a big effort it would also be a great
    311  1.1  dholland publicity lever...)
    312  1.1  dholland 
    313  1.1  dholland 
    314  1.1  dholland  16. Full console virtualization
    315  1.1  dholland 
    316  1.1  dholland The Unix notion of a login session is stuck in the 70s, where you log
    317  1.1  dholland in on a glass teletype and that's all you get. The consoles of modern
    318  1.1  dholland computers have assorted other widgets as well: pointing devices, game
    319  1.1  dholland controllers, cameras, scanners, removable storage, hotkeys, audio
    320  1.1  dholland playback and record... not to mention graphics and video. Right now we
    321  1.1  dholland have a bodgy scheme for chowning or chmod'ing devices on console
    322  1.1  dholland login; in addition to potentially causing problems (what happens if
    323  1.1  dholland one user leaves a process behind that's recording audio, then logs out
    324  1.1  dholland and walks away?) this doesn't work well with multiple users logged in
    325  1.1  dholland at once on the console. It also doesn't work at all with remote logins.
    326  1.1  dholland 
    327  1.1  dholland In an ideal world, all your console hardware would be tied to your
    328  1.1  dholland console login session, and virtualized appropriately so that multiple
    329  1.1  dholland console logins each get suitably arbitrated access. Furthermore, it
    330  1.1  dholland should be possible to forward your console hardware to a remote login
    331  1.1  dholland session -- for example if you have a usb stick you should be able to
    332  1.1  dholland log in somewhere and mount it there.
    333  1.1  dholland 
    334  1.1  dholland Getting to this requires refactoring the way we think about logins and
    335  1.1  dholland login devices, but it's high time.
    336  1.1  dholland 
    337