An Open Letter to Ubuntu Developers
(apologies for the length)

First of all, I would like to thank all that participate in Free
Software.
I could write for days about how I appreciate individual upstream
projects and the work done by various distributions, but for brevity I'm
lumping all this into one big thank you.

This is not meant to be a series of rants, please do not take it as
such.
I am hoping this will come across as a comprehensive series of
observations of desktop Linux usage, from a long-time (and I like to
think, competent) Linux user / sysadmin.

I am targeting this at the developers of Ubuntu.
I could have broken this down and targeted specific upstreams, but for
better or worse, I believe Ubuntu is gaining serious mainstream traction
on the desktop, and I think this will reach more people and have more
impact if I target Ubuntu specifically.
Having said that, none of this letter is intended to be Ubuntu specific,
instead being applicable across distros and upstream projects.


1) Applications, and their dependence on desktop environment libraries

Currently certain application rely on specific desktop environment
libraries to operate.

As examples,
if you install kate on stock Ubuntu 10.04, you pull in 108 packages,
totalling 330Mb

        akonadi-server exiv2 gdebi-kde icoutils install-package kate
        kdebase-runtime
        kdebase-runtime-data kdebase-workspace-bin
        kdebase-workspace-data
        kdebase-workspace-kgreet-plugins kdelibs-bin kdelibs5
        kdelibs5-data
        kdepim-runtime kdepimlibs-data kdepimlibs5 kdesudo kpackagekit
        ksysguardd
        kubuntu-debug-installer libakonadiprivate1 libattica0 libaudio2
        libboost-program-options1.40.0 libclucene0ldbl libdbusmenu-qt2
        libexiv2-6
        libiodbc2 libkephal4 libkfontinst4 libkscreensaver5 libksgrd4
        libkworkspace4
        libmng1 libmodplug0c2 libmpcdec3 libmysqlclient16
        libpackagekit-glib2-12
        libpackagekit-qt-12 libphonon4 libplasma-applet-system-monitor4
        libplasma-geolocation-interface4 libplasma3 libplasmaclock4
        libplasmagenericshell4 libpolkit-qt-1-0 libprocesscore4
        libprocessui4
        libqca2 libqimageblitz4 libqt4-assistant libqt4-dbus
        libqt4-designer
        libqt4-help libqt4-network libqt4-opengl libqt4-qt3support
        libqt4-script
        libqt4-scripttools libqt4-sql libqt4-sql-mysql libqt4-svg
        libqt4-test
        libqt4-webkit libqt4-xml libqt4-xmlpatterns libqtcore4 libqtgui4
        libsolidcontrol4 libsolidcontrolifaces4 libsoprano4 libssh-4
        libstreamanalyzer0 libstreams0 libtaskmanager4 libweather-ion4
        libxcb-shape0
        libxcb-shm0 libxcb-xv0 libxine1 libxine1-bin libxine1-console
        libxine1-misc-plugins libxine1-x mysql-client-core-5.1
        mysql-common
        mysql-server-core-5.1 oxygen-icon-theme packagekit
        packagekit-backend-apt
        phonon phonon-backend-xine plasma-dataengines-workspace
        plasma-scriptengine-javascript plasma-widgets-workspace
        polkit-kde-1
        python-kde4 python-packagekit python-qt4 python-sip
        shared-desktop-ontologies software-properties-kde soprano-daemon
        ttf-dejavu
        ttf-dejavu-extra update-manager-kde virtuoso-nepomuk


By contrast, if you install gedit on stock Kubuntu 10.04, you pull in 62
packages, totalling 72Mb

        esound-clients esound-common gamin gedit gedit-common
        gnome-mime-data gvfs
        gvfs-backends indicator-application launchpad-integration
        libappindicator0
        libart-2.0-2 libaudiofile0 libavahi-glib1 libbonobo2-0
        libbonobo2-common
        libbonoboui2-0 libbonoboui2-common libcdio-cdda0
        libcdio-paranoia0 libcdio10
        libdbusmenu-gtk1 libesd0 libgail18 libgamin0 libgdu0 libgnome2-0
        libgnome2-common libgnomecanvas2-0 libgnomecanvas2-common
        libgnomeui-0
        libgnomeui-common libgnomevfs2-0 libgnomevfs2-common
        libgtksourceview2.0-0
        libgtksourceview2.0-common libgvfscommon0 libindicator0
        libjson-glib-1.0-0
        liblaunchpad-integration1 libnotify1 libproxy0 libsexy2
        libsoup-gnome2.4-1
        libsoup2.4-1 libstartup-notification0 libwnck-common libwnck22
        libxcb-atom1
        libxcb-aux0 libxcb-event1 libxres1 notification-daemon
        policykit-1-gnome
        python-cairo python-gconf python-gnome2 python-gnomecanvas
        python-gtk2
        python-gtksourceview2 python-pyorbit zenity

Note the requirement for MySQL client libs when installing kate on
Ubuntu, and the requirement for Esound when installing gedit on Kubuntu.
These are obviously needed for some DE libraries, and (you'd hope)
should not impact the functionality of a simple GUI text editor.

I understand the fact that desktop environments provide a multitude of
services / functionality, including being platforms on which other
applications can be built.
But surely it's desirable (and possible) for apps to be DE agnostic, and
depend on plumbing libraries that are common (and shared) across DE's.

There must be a way for the plumbing elements of today's DE's to be
shared, and for the look & feel of a GUI app to be nothing more than a
very thin wrapper over a standard base.
I've never seen the logic in tying applications to specific DE
libraries.

Please do not think I'd trying to advocate the need for a single desktop
environment (far from it)
I like the choices that are available, and believe it sparks competition
and innovation.
but do one thing, and do it well, and currently desktop environments
seem to do a whole host of generic tasks, using their own bespoke
libraries, that could be split out into cross-environment libraries.

It's not like this is uncharted territory, either
There's a few examples of protocols / APIs that cater for new features /
abilities in specific implementations
OpenGL being one
Would it not be possible for all DE's to adhere to a standard protocol
Then, for example, if KDE 5, or Gnome 3.7 introduce a new concept, this
can be dealt with by an extension to the protocol
If the new concept is picked up by other DE's, then it can be written
into the core protocol


2) Everything's a file

This Unix philosophy seems to have been forgotten in many of today's
applications / userland servers

Wouldn't it be wonderful if the sound being output to the systems
soundcard(s) or individual apps were available via a file
Completely independent of whatever sound system (ALSA, OSS, OpenAL) or
sound server (PulseAudio, Jack) happens to be in use

        cat /dev/snd/stereo_out1 > ~/speaker_output.wav
        cat /dev/snd/pid_1234 > ~/app_output.wav

rather than the various custom and bespoke recording programs / shell
scripts that are needed currently

Also with capturing screencast videos
(ignoring arguments about codecs / containers)

        cat /dev/display/xscreen1 > ~/desktop_screencast.ogm
        cat /dev/display/pid_1234 > ~/app_screencast.ogm

Taking this one step further, if all AV produced by apps are available
via files, I think the process of combining various AV streams would be
greatly simplified.

Pipe the video stream from your screenA into a multiplexer
Cat audio streams from appX and appY into a mixer, and pipe combined
audio into the multiplexer
Redirect multiplexer output to a file

Don't think of the above as the typical user-facing way of doing things
More a standard framework for writing GUI apps to achieve such tasks.
I think this would greatly simplify, standardise, and enhance such GUI
helper apps for manipulating AV on a desktop machine, as all AV is dealt
with in a standard (and simple) way, and again, it would be sound system
and sound server agnostic.


3) Link GUI & CLI operations using common syntax

I'm in two minds about including this,
as this is not a usual use-case for the majority of people
but I'd love for all GUI applications to be invokable via the CLI, using
some standard syntax
I've found that often times I'll use a GUI app to perform some set of
operations, then I'm wanting to perform the same operations across
multiple files, and currently I'm forced to find alternative apps of
automating said operations

Eg. I've recently needed to perform the following operations on several
hundred photos
in order for them to blend in with a user-configurable webpage colour
scheme
(Making an image whose background gradually fades to transparent at the
image boundaries)
- Open image in the Gimp
- add a transparent layer
- Select all
- Shrink selection by 5px
- Feather selection by 5px
- Invert selection
- Clear selection (to transparent)
- Save as a PNG

Surely it should be possible to automate such GUI operations using a CLI
interface
and if you've got experience with a specific desktop app, I think it
would be hugely beneficial if you could keep using the same program both
on the GUI and on the CLI

        for IMG_FILE in $IMG_FILES; do
                gimp-cli
        
--process="layer-add:transparent;select-all;select-shrink:5px;select-feather:5px;select-invert;select-clear;file-save:${IMG_FILE}.png"
 $IMG_FILE
        done

I can think of a few examples of complex GUI operations that would
benefit from easy CLI automation
If some sort of standard syntax could be developed to automate
operations via a CLI interface, I'd die happy

And (this may be a little too ambitious, but just suppose) if the syntax
of these CLI operations could be sufficiently generalised across all GUI
applications, you could, given an arbitrary CLI command, spit back out a
simple bullet point set of GUI instructions for users to follow.
CLI is universally English, GUI is not.
This may be beneficial to documentation writers and translators
Write one command, and ask it to output GUI instructions in x number of
languages
but that's probably not very do-able, I admit.


Anyway, if you got this far, then thanks for reading.
As I said at the start, this is just a collection of things I think
(from my POV) could be done to improve the overall experience that is
Linux.

-- 
Tony Atkinson
Email: tatkinson...@googlemail.com
PGP: F2B9184B

Attachment: signature.asc
Description: This is a digitally signed message part

-- 
Ubuntu-devel-discuss mailing list
Ubuntu-devel-discuss@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/ubuntu-devel-discuss

Reply via email to