Announcement: One Click Installer

Greg K Nicholson spam at gkn.me.uk
Tue Aug 7 01:41:29 BST 2007


Krzysztof Lichota:
> Greg K Nicholson napisał(a):
>> The apt protocol ( https://wiki.ubuntu.com/AptFirefoxFileHandler ) will 
>> fix this.
> 
> Yes, this is similar to what I want to achieve, but:
> - it does not provide information for different distributions and other
> systems than APT
> - it does not provide multiple versions for different distribution versions
> - it does not provide localized application descriptions
> 
> And I do not think such amount of information should be put in URLs, it
> is just too big. URLs should not hold data.

For a start, as has been suggested elsewhere, it should be renamed to a 
generic “install” URI scheme, rather than apt. That's just cosmetic.

Perhaps all that other information doesn't need to be included in the 
URL. The installation system could be backed up by a remote library that 
provides all the extra information. (Let's call this the Remote 
Universal Metadata Library idea.) The URL would only have to contain the 
name of the package that should be installed (and perhaps optionally a 
version range).

Once the installation of a particular package/version has been 
initiated, the user's computer would request all the other information 
about that package/version from the remote library, a service running on 
some web server that's known to be trusted. The user's computer would 
have a list of library servers (provided by the distro, like the default 
repositories' addresses are); if one is unavailable it would try 
another. Encryption and so on would be applied as appropriate (and for 
anything else I fail to mention, assume the best solution you can think of).

All library servers would be completely interchangeable as far as the 
user's computer is concerned. Either they would all be mirrors of each 
other and offer exactly the same information, applicable to all distros 
(and not necessarily restricted to Linux); or each server would hold a 
subset, and would (somehow) be able to redirect the user's computer to 
whichever server holds the appropriate subset for any case.

I imagine that the major Linux vendors would each host a library server, 
SourceForge might have one too, as would some or all of the servers that 
currently provide mirrors for open source projects' downloads. Remember, 
we're only dealing with short snippets of metadata, not the installers 
themselves, so this isn't a universal repository of all software — just 
a universal repository of all software installation metadata (ideally).

I assume something like Bazaar (with which I'm only cursorily familiar) 
could make it possible for all the servers to talk to each other 
peer-to-peer-style, so that even tiny distro makers can share their 
metadata with the big guys. And there'd be some magical system to ensure 
that no single library server gets pummelled harder than it has to — 
Mozilla's Bouncer tool might be in the right area.

The user's computer would send to the library server the name (and 
version range) of the package to be installed, plus all the relevant 
details of the user's computer, presumably as a user agent string. The 
relevant details are probably (at least) distro, distro version, 
hardware architecture, user language/locale(s) and preferred 
installation method(s)—apt, rpm, source, whatever.

The library server would know what the current version of the package is 
for that distro/version/architecture/language/install-method 
combination, what repositories and gpg keys need to be added (if 
applicable) and so on. If a package goes by different names in different 
distros, the library would know which names are equivalent and offer the 
right one for the user's distro. For distros that don't use a packaging 
system (such as those from Redmond and Cupertino), the library should be 
able to return the URL of an appropriate webpage or (distinctly) an 
installer.

I'm visualising this library as a vast table with program versions down 
the left, and distro/version/etc combinations across the top. At the 
intersections are instructions like:

<package repo="http://bar.example.com">foo</package>

Sometimes there are several instructions:

<package repo="http://bar.example.com">foo</package> 
<gpgkey>http://baz.example.org/gpgkey</gpgkey>

For Windows (and similarly for OS X) the instructions might be:

<choose> <option> <webpage>http://quux.example.net</webpage> </option> 
<option> <installer>http://quux.example.net/monkeys.exe</installer> 
</option> </choose>

(That's choice for the user's computer; it needn't necessarily be shown 
to the user every time.) Gentoo might use:

<source>http://cheese.example.org/src.tar.gz</source>

(or however Gentoo works.)

The library server would send back — possibly in a simple XML dialect, 
as above — all the information the user's computer needs to be able to 
install the software with no help from the user, although the user would 
probably be shown what was about to happen and would have to confirm the 
installation. Of course, the UI implementation would be up to each distro.

So, given the name of a piece of software you want to install, and the 
details of the computer you want to install it on, this service would be 
able to respond with machine-readable instructions for how to install 
that software on that computer.

(I assume that Ubuntu's packaging infrastructure (at the developers' 
end) is clever enough to be able to populate such a database without 
absurd levels of human input.)




More information about the Ubuntu-devel-discuss mailing list