summaryrefslogtreecommitdiff
path: root/community/gsoc/project_ideas/download_backends.mdwn
blob: 749597a6cb8de5cceed80dc3f0135f276a80d032 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
[[!meta copyright="Copyright © 2009 Free Software Foundation, Inc."]]

[[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable
id="license" text="Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Free Documentation License, Version 1.2 or
any later version published by the Free Software Foundation; with no Invariant
Sections, no Front-Cover Texts, and no Back-Cover Texts.  A copy of the license
is included in the section entitled
[[GNU Free Documentation License|/fdl]]."]]"""]]

[[!meta title="Use Internet Protocol Translators (ftpfs etc.) as Backends for Other Programs"]]

The Hurd design facilitates splitting up large applications into independent,
generic components, which can be easily combined in different contexts, by
moving common functionality into separate Hurd servers (translators),
accessible trough filesystem interfaces and/or specialized RPC interfaces.

Download protocols like FTP, HTTP, BitTorrent etc. are very good candidates for
this kind of modularization: a program could simply use the download
functionality by accessing FTP, HTTP etc. translators.

There is already an ftpfs traslator in the Hurd tree, as well as an [httpfs
translator on hurdextras](http://www.nongnu.org/hurdextras/#httpfs); however,
these are only suitable for very simple use cases: they just provide the actual
file contents downloaded from the URL, but no additional status information
that are necessary for interactive use. (Progress indication, error codes, HTTP
redirects etc.)

A new interface providing all this additional information (either as an
extension to the existing translators, or as distinct translators) is required
to make such translators usable as backends for programs like apt-get for
example.

The goal of this project is to design a suitable interface, implement it for at
least one download protocol, and adapt apt-get (or some other program) to use
this as a backend.

This task requires some design skills and some knowlegde of internet protocols,
to create a suitable interface. Translator programming knowledge will have to
be obtained while implementing it.

It is not an easy task, but it shouldn't pose any really hard problems either.

Possible mentors: Olaf Buddenhagen (antrik)

Exercise: Make some improvement to one of the existing download translators --
httpfs in particular is known to be buggy.