An Open Letter to Ubuntu Developers
Tony Atkinson
tatkinson321 at googlemail.com
Mon Sep 6 16:05:23 UTC 2010
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: tatkinson321 at googlemail.com
PGP: F2B9184B
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part
URL: <https://lists.ubuntu.com/archives/ubuntu-devel-discuss/attachments/20100906/a5eb1e76/attachment.sig>
More information about the Ubuntu-devel-discuss
mailing list