Simon has submitted the final builds of xdg-app to the debian archives:
https://anonscm.debian.org/git/collab-maint/xdg-app.git
So, pretty soon now you’ll be able to just do “apt-get install xdg-app” to get xdg-app in Debian!
Simon has submitted the final builds of xdg-app to the debian archives:
https://anonscm.debian.org/git/collab-maint/xdg-app.git
So, pretty soon now you’ll be able to just do “apt-get install xdg-app” to get xdg-app in Debian!
When I set out to create xdg-app I had two goals:
Yesterday I released version 0.5.0 of xdg-app, and which I now finally consider feature complete for the first of these goals. It now has tooling that makes it easy to build apps, it has multiple graphical frontends, and it is now pretty robust and featureful.
0.5.0 is already built in Fedora 23, and is available for other distributions here.
No software is ever finished obviously, so I will continue working on xdg-app. However, going forward the majority of my work will now be focusing on the sandboxing and portal aspects of xdg-app.
Lot of interesting work on xdg-app lately!
I’ve created a new runtime based on the latest unstable gnome, and during the Gnome developer experience hackfest we made bundles for a bunch of core Gnome applications.
I’ve set up a nightly build of these so that anyone can play with the latest Gnome apps on any distro, without having to build anything.
Additionally, Richard and I have been working on making gnome-software able to work with xdg-app.
The culmination of this is using xdg-app to install gnome-software and then using that to install more xdg-apps:
This works out of the box on Fedora 23, just make sure you have xdg-app 0.4.11 installed (it’s in updates-testing at the moment). For other distributions, I have made packages which are available here.
Once you have xdg-app installed, its very easy to test them. First you need to add the remote repositories:
$ curl -O http://sdk.gnome.org/nightly/keys/nightly.gpg $ xdg-app --user remote-add --gpg-key=nightly.gpg gnome-nightly http://sdk.gnome.org/nightly/repo/ $ xdg-app --user remote-add --gpg-key=nightly.gpg gnome-nightly-apps http://sdk.gnome.org/nightly/repo-apps/
Then you need to install the runtime:
$ xdg-app --user install gnome-nightly org.gnome.Platform
And then you can install some app:
$ xdg-app --user install gnome-nightly-apps org.gnome.Weather
At this point the app is installed and you should be able to start it like any regular app in your desktop. You can also manually start it via xdg-app:
xdg-app run org.gnome.Weather
The list of available apps can be seen with:
$ xdg-app --user remote-ls gnome-nightly-apps --app
Or you can install and use gnome software like in the demo.
For anyone following the development of xdg-app, all development have now moved to freedesktop.org. Here is where things are happening now:
An important aspect of xdg-app is application sandboxing, which will require application changes to use sandbox-specific APIs. However, xdg-app is also a good way to deploy and run non-sandboxed (or partially sandboxed) regular applications.
A very interesting usecase for this is to have an image-based operating system, for instance a Workstation spin of Fedora Atomic. Such a system would have a basic workstation installation with a read-only /usr, and atomic updates/rollback. However, installing an application is painful, and customizing yor install in that way undoes many of the advantages of an image-based OS.
With xdg-app you can install apps into /var (or $HOME) and have them fully integrate with the system, while still being isolated from changes to the host. This makes for a great combination, just like atomic + docker is a good combination for the server space.
I’ve spent some time recently making a prototype runtime based on the Fedora packages, as reported on the desktop list. This is kind of interesting as it lets you test applications from rawhide on fedora 21 or 22. Just install xdg-app from fedora-updates and then install the runtime:
$ xdg-app add-remote --no-gpg-verify --user fedora http://fedorapeople.org/~alexl/repo/ $ xdg-app install-runtime --user fedora org.fedoraproject.Platform 23
And then you can try gedit 3.17.0:
$ xdg-app install-app --user fedora org.gnome.gedit $ xdg-app run org.gnome.gedit
Or evince 3.17.2:
$ xdg-app install-app --user fedora org.gnome.evince $ xdg-app run org.gnome.evince
Once installed you can also just start them from the desktop environment as usual. They should be there like any regular application as the desktop files and icons are exported to the host.
As people who have followed the work on sandboxed applications know, we have promised a developer preview for GNOME 3.16. Well, 3.16 has now been released, so the time is now!
I spent last week setting up an build system on the GNOME infrastructure, and the output of this is finally available at:
This repository contains the gnome 3.16 runtimes, org.gnome.Platform, as well as a smaller one that is useful for less integrated apps (like games) called org.freedesktop.Platform. It also has corresponding develoment runtimes (org.gnome.Sdk and org.freedesktop.Sdk) that you can use to create applications for the platforms.
This is a developer preview, so consider these builds weakly supported. This means I will try to keep them somewhat updated if there are major issues and that I will keep them API and ABI stable. I will probably also pick up at least some 3.16.x minor releases as they are released.
I also did the first official release of xdg-app. For easy testing this is available for Fedora 21 and 22 as a copr repo.
Using the repo above makes it really easy to test this. Just install the xdg-app package from copr, log out+in (needed update the environment for the session), then follow these instructions (as a regular user):
$ xdg-app add-remote --user gnome-sdk http://sdk.gnome.org/repo/ $ xdg-app install-runtime --user gnome-sdk org.gnome.Platform 3.16 $ xdg-app install-runtime --user gnome-sdk org.freedesktop.Platform 1.0
$ xdg-app install-runtime --user gnome-sdk org.gnome.Platform.Locale.se 3.16 $ xdg-app install-runtime --user gnome-sdk org.freedesktop.Platform.Locale.se 1.0
$ xdg-app add-remote --user --no-gpg-verify test-apps https://people.gnome.org/~alexl/test-apps/repo/ $ xdg-app install-app --user test-apps org.gnome.gedit $ xdg-app install-app --user test-apps org.freedesktop.glxgears
$ xdg-app run org.gnome.gedit $ xdg-app run org.freedesktop.glxgears
$ xdg-app install-runtime --user gnome-sdk org.gnome.Sdk 3.16 $ xdg-app install-app --user test-apps org.gnome.Builder
All the above install the apps into your home-directory (in ~/.local/share/xdg-app) . You can also run the commands as root and skip the –user arguments to do system-wide application installs.
With the basics now laid down to run current applications in a minimally isolated environment the next step is to work on the sandboxing aspects more. This will require lots of work, both in the system side (things like kdbus), the desktop (add sandbox aware APIs, make pulseaudio protect clients from each other, etc) and in modifying applications.
If you’re interested in this, you can follow the work on the wiki.
If you download the SDKs you have enough tooling to build your own applications. There are some documentations on how to do this here.
I also created a git repository with the scripts I used to build the test applications above. It uses the gnome-sdk-bundles repostory which has some tooling and specfiles to easily bundle dependencies with the application.
If you ever want to build the SDK yourself, it is available at:
https://git.gnome.org/browse/gnome-sdk-images
This repository contains the desktop specific parts of the SDK, which is layered on a core Yocto layer. When you build the SDK this will be automatically checked out and built from:
https://git.gnome.org/browse/freedesktop-sdk-base
However, if you don’t want to build all of this you can download the pre-build images from http://sdk.gnome.org/images/x86_64/ and put them in the freedesktop-sdk-base/images/x86_64 subdirectory of gnome-sdk-images. This can save you a lot of time and space.
Its not a secret that I’ve been working on sandboxed desktop applications recently. In fact, I recently gave a talk at devconf.cz about it. However, up until now I’ve mainly been focusing on the bundling and deployment aspects of the problem. I’ve been running applications in their own environment, but having pretty open access to the system.
Now that the basics are working it’s time to start looking at how to create a real sandbox. This is going to require a lot of changes to the Linux stack. For instance, we have to use Wayland instead of X11, because X11 is impossible to secure. We also need to use kdbus to allow desktop integration that is properly filtered at the kernel level.
Recently Wayland has made some pretty big strides though, and we now have working Wayland sessions in Fedora 21. This means we can start testing real sandboxing for simple applications. To get something running I chose to focus on a game, because they require very little interaction with the system. Here is a video I made of Neverball, running in a minimal sandbox:
In this example we’re running a regular build of neverball in an environment which:
Yet the application is still simple to install and integrates nicely with the desktop. If you want to test it yourself, just follow the instructions on the project page and install org.neverball.Neverball.
Of course, there are still a lot to do here. For instance, PulseAudio doesn’t protect clients from each other, and for more complex applications we need to add new APIs to safely grant access to things like user files and devices. The sandbox details page has a more detailed list of what has to be done.
The road is long, but at least we have now started our journey!