-
-
Notifications
You must be signed in to change notification settings - Fork 563
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Investigate AppStream metadata for building app directory #48
Comments
Talked to @aleixpol and he suggests that we should be providing a list of available AppImages in the format of archlinux-appstream-data (use this format but serve the icons on demand under a URL). This would make it easiest for software centers like App Center and Discover to pick the information up. It is especially important to use the same I can imagine (at least) three ways where software centers could get the information about AppImages from:
|
For presenting the app directory in the web (in addition to software centers coming with the desktop), possibly @ximion has some code that could serve as a starting ground. |
I would need more information on what you are planning ;-) For an app-directory on the web, I am currently experimenting with the vibe.d ( http://vibed.org/ ) framework for developing an online repo service. Vibe has some very nice properties, mainly being similar to NodeJS, but using a language which doesn't drive you insane with crazy levels of callback-nesting. But I am not yet 100% sure whether Vibe will be the final solution, although it's looking quite good so far. |
Thanks @ximion for the detailed explanation. As for what exactly we are trying to do, well, we are still trying to figure out what would make most sense for a decentral, community-based/crowd-sourced/chain-of-trust type of system. What seems clear is that with more and more options for users to get software (native distribution package, ppa, COPR, Flatpak, Snappy, AppImage - stable, rolling, nightly) if seems to be common sense that it would be beneficial to offer these choices to the user in a convenient way inside the software centers. |
Well, AppStream is tying all of these together and allows them to share metadata. |
Looks like you have thought of everything @ximion, yay for the Would something along the lines of
be allowable, with the actual version numbers being determined on demand, in order to save bandwidth? I am especially thinking of continuous where you'd have to check for the version essentially all the time. Or is the |
Don't you want to specify the URL instead of a channel? |
Correct @aleixpol. Will think about how to do this best. Edit: Maybe it would be best to link to the download page, and have the user download the AppImage from there. This way the website could count downloads, etc. in any way it wants. |
@hughsie had been mentioning the need for a "central registry of AppImages" on https://blogs.gnome.org/hughsie/2016/04/27/3rd-party-fedora-repositories-and-appstream/#comment-5183 So, how would one do a "central registry of AppImages" without being too restrictive about what gets "in"? Right now I can imagine
Thoughts welcome. |
@probonopd Please read the AppStream spec, especially the distinction from metainfo files vs. distro-metadata. If you want to have different "channels" of an application, the only way to realize that right now would be giving them a different component-id. For example In my personal opinion, alpha and beta releases should not be in the software sources at all, because having them is incredibly confusing for people, and it creates overcomplicated UI and presents users a decision of taking the newest version, or some older release, which they might no be able to make and usually don't need to make, because there is a released, known to be woring version available. |
I can see how this would work for Aurora (which in fact can be seen as a "different application" (has its own name, icon etc.). But if you take Scribus or the GIMP then i'm not sure that treating the development version as a "different application" is the best way. I also understand that in order not to confuse ordinary users, development/nightly/continuous versions should not be shown too prominently, and there might be a warning when installing them, or a GUI checkbox that would beed to be checked in order for the user to see such versions. Especially with AppImages, I expect one major use case to be development versions (for the very reason that one app = one file makes it super easy to just try something out). So I am convinced that it could be beneficial to have no limit on the number of different versions possible to be offered, including historical ones. Take web browsers, for example - I am sure that web designers, for example, might want to test something not only on the latest but also on other versions of browsers. That being said, I am even more inclined now to just put in the web link to the project's download page instead of a deeplink to the AppImage. This way, the project can explain the different versions on the download page and provide as many options, versions, or variants as they want, give warnings regarding development versions, etc. On the following question I would really appreciate some input - what exactly is supposed to go into the bundle tag. An URL from where the bundle(s) can be downloaded? Pro: User can decide which bundle to download, contra: cannot automatically download/update/"install". An identifier that allows an AppImage helper (AppImageUpdate or a gnome-software/discover plugin) to download/update the AppImage? Pro: More automation. Con: How to handle more than 1 version/channel? Is there any existing convention on what goes into the bundle tag?
Correct? Or is this reserved for non-HTTP-links and we should use something like
|
@ximion One open question is, how do software centers "learn" about bundled software (Flatpak, AppImage etc.) An AppImage that contains AppStream data should be able to place this to a location in the system where software centers can pick it up. https://mail.gnome.org/archives/gnome-software-list/2016-June/msg00000.html talks about |
Not yet, it's something GNOME Software specific, so you can not rely on it being present or used at all. |
@ximion at least for AppImage, being able to download and run applications without the need for root rights is essential. So I would really appreciate |
Can someone clarify the relationship between AppStream and Appdata? ("AppData is a subset of the AppStream schema, which is also XML." is the official explanation, but I would be interested in what I should provide, and why there are two...) Especially, if an upstream project such as Krita provides AppStream data, is it converted to Appdata before it is included in Fedora, and would any |
Remains the question, how can the system learn about not-yet-installed AppImages for software that are not part of the distro.
|
@probonopd Read the spec, it's all explained there ;-) When Richard started the upstream metadata as "appdata", it was a subset of AppStream, today it isn't anymore. The Distro-Metadata is a refined Metainfo file, which allows more tags (e.g. Upstream Metadata (Metainfo/Appdata): Distro Metadata (shipped by Linux distributions, Limba and Flatpak): Quickstart Guides (helping upstream projects to write good metadata, not covering the full metainfo spec): |
What do you do if /home is mounted noexec? What if the company has a policy disallowing executing stuff from /home? How do you deduplicate data in multi-user setups (where every user might install the very same app)? Anyway, searching the locations in $HOME is cheap and will come eventually. Some other issues need to be resolved first though, before this can happen. |
This is what I see today when I search for Krita in Ubuntu 16.06: So apparently the only version being displayed is 3.0-snap12 because the gnome-software snap plugin has got this version from snapd with which it has communicated. Apparently this results in the version provided by the distribution in not being shown at all, nor the description or any of the URLs. So if Krita would put in a How are software centers supposed to decide what to show and what not to show? |
Then the administrator has deliberately made the choice to disallow this kind of thing, which I think is fine.
Put AppImages in |
Please help me wrap my head around this. I don't quite understand the separation between upstream-provided and distro-provided information but I suspect it doesn't allow upstreams to offer their own binaries. Right now upstreams are supposed to supply only a subset of the total information; and unfortunately this subset doesn't include the So what is an upstream supposed to do who wants to provide his own bundle, from his own website, without interference from distributions, and wants to have this displayed in the software centers? Can you show me, e.g., using the Krita AppStream file, what you would recommend the Krita upstream authors to do in this case? |
(Why is there no quote button on Github? Quoting manually is really annoying...)
For web browsers maybe, and for very advanced users. But for the rest, installing ancient versions with security issues is a bad thing. Especially for software centers, which AppStream is primarily designed for. AppStream really is designed with having a single "current" version where the metadata is made for, which will be installed. Installing different versions is not supported at all, and will never be. There are also other issues with this approach: For example, most apps are forward-compatible and can read the configuration files and data an older version of the app has created. Once you switch back to the older app, you might not be able to read the data anymore, which can cause data loss in the worst case (think of e.g. an email app with a non-standard mail storage method).
Agreed - old-version links on the projects home page do make sense - in software centers, not so much.
It's relatively free-form. Software centers link to a shared library the bundling system provides, and pass it the id found in the bundle tag to install or remove an app. What this id is exactly is up to the bundling system.
No, they can't - there is always one "current" bundle per component-ID.
Sounds good to me.
You don't offer that feature. User who want a different version can get it from the developer's website.
No, use whatever makes sense for you.
That would be invalid use of the Greetings from Debconf/Debcamp :-) |
Snappy doesn't use AppStream, so their metadata sucks. See https://bugs.launchpad.net/ubuntu/+source/gnome-software/+bug/1588266 There seems to be a misconception on your side: The The
Yes - this should be the default mode of operation when installing stuff via GNOME Software, e.g. place the bundles in
Yes - the remaining data is filled in via tools like appstream-generator1 or appstream-builder2 which operate on repositories of software.
Upload it to some repository service which is generating the data and the source of which can be added as ttrusted download source to a SC. OR just submit a link to a service like that. Adding the download link to metainfo files is impractical, see the reasons given above. |
After IRC conversation with @ximion I understand the situation as follows: The bundle system should provide AppStream data in the "distribution" format (AppStream distribution XML files = upstream-provided AppStream metadata = "metainfo", "appdata") from a central location. The service at the "central location" should use upstream-provided AppStream data Using the existing data flows from the upstream to the distributions is probably not suitable to carry information regarding a) "a bundle exists" b) "here is how to download the bundle" c) "the following version(s) are available as a bundle" because AppStream information in distributions is frozen when the distribution is released, and because distributions might not like/remove it (viewing binaries provided by upstreams like "untrusted 3rd parties"). The only problem: We don't want a "central location", but rather want upstreams to provide this information themselves. But hey, somewhere the information must come from... any ideas appreciated. |
Only half-knowingly what I am doing, am I on track here @ximion?
EDIT: Updated the script and added descriptive comments |
Not sure what I am seeing here ^^ Additionally, the |
Thanks @ximion. What do I want to achieve? I want to gather all necessary information about AppImages that are hosted by upstreams, insert the I have updated the script above and added descriptive comments. Would be great if you could check what I am doing there. The |
Doesn't look bad - I don't know how the appstream-compose command is working exactly, that is hughsie's doing ^^ (you probably need to pass it a spec version to always have it output the right format). To avoid the hackery with The Since I just finished preparing my AppStream talk, I might have time tomorrow to work on AppStream a bit (before starting to prepare my other talk on bundling ^^). |
There is now official support for AppImage in AppStream: ximion/appstream@1df590d Thanks @ximion! |
https://github.com/openSUSE/software-o-o/ seems to be the code that powers https://software.opensuse.org/appstore - a ready implementation of an app store |
@ximion @aleixpol @hughsie
So far I was under the impression that it would be enough to populate the bundle tag in a metainfo file and put that into |
@probonopd AppStream doesn't support data in $HOME directories yet, mainly due to my very strong aversion to installing anything in user's home. Adding this will happen though, since it's useful for testing and Flatpak needs it too, I think appstream-glib does support it already even. The directory will be Collection metadata in So, if you just want to register your app once it is installed, dropping a metainfo file is enough. If you want a software catalog-like feature, a collection file is usually what you need. |
Err, appstream-glib has supported ~/.local/share/app-info/xmls since its inception... |
@hughsie I find it disturbing that people would be able to override system metadata with stuff in their home directory. When I add it (highly likely with the next release), there will be a couple of checks for that. |
gnome-software uses the "user" app-info location for the gnome-shell extensions support (which is per-user) and also for the steam database (which is also per-user). The other thing it's hugely useful for is testing the various things... |
With most configuration, it is actually the other way around: The system provides r/o defaults which the user can override in r/w I would like to provide per-user catalog data (as in: the user doesn't need root rights to read the catalog data and the application that gets/downloads/generates the catalog data also doesn't need root rights). This doesn't have to override system-provided information, but it should augment it. For example: LTS distribution comes with Krita 2.5 but my per-user catalog data has 3.1. The software center (GS, Discover, etc.) would either
One can dream... :-) |
That channels stuff doesn't exist, but everything else is pretty much there. |
There hasn't been any activity for quite a while. Is any of this still relevant? |
Yes. This is still to be figured out. |
Started working on https://github.com/AppImage/AppImageHub/. Is there an |
@probonopd Trusty has AppStream, but the version in there is ancient and should really not be used. Ideally, use Xenial, which is much better maintained. |
We could make it into an AppImage that bundles everything, https://github.com/lvml/makeaoi :-) |
Side note, it seems to me that using a scripting language for linting would be better suitable since it would allow to lint AppStream files on LTS/Enterprise distributions while still getting the latest rules for linting more easily... |
It's being implemented now at https://github.com/AppImage/appimage.github.io/, hence closing here. |
The AppStream specification describes the AppStream upstream XML format which is used by upstream software authors to describe the software component (application, firmware, font, ...) they provide, as well as the AppStream distro XML format that is used by distributions to ship the metadata in bundled and processed form to their users.
Ideally, apps would be packaged by the upstream projects, and a repository of apps including version and update information, screenshots, as well as stars (or AppStream kudos) could be built. When I tried to do this a decade ago for klik and later for PortableAppImages, cross-distribution metadata infrastructure was not available, but now it begins to fall into place.
AppStream distribution XML files could be parsed.
Debian collects icons and app metadata here:
https://appstream.debian.org/data/unstable/main/
It looks like AppStream is built with Xapian in mind. Xapian is an Open Source Search Engine Library, released under the GPL. It's written in C++, with bindings to allow use from Perl, Python, PHP, Java, Tcl, C#, Ruby, Lua, Erlang and Node.js (so far!)
The text was updated successfully, but these errors were encountered: