summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
Diffstat (limited to 'doc')
-rw-r--r--doc/introduction.docbook162
1 files changed, 74 insertions, 88 deletions
diff --git a/doc/introduction.docbook b/doc/introduction.docbook
index 8b85ee5..028d5ce 100644
--- a/doc/introduction.docbook
+++ b/doc/introduction.docbook
@@ -5,81 +5,72 @@
<title>Motivation</title>
<para>
-To make the software as portable as possible, back in the days, GNU
-created the autoconf package, that allowed them to discover the
-features of the compiler and of the C library they were building, so
-they could build the same code over different operating systems and
-platforms.
+To make software as portable as possible, GNU developers created the autoconf
+package, which allowed them to discover the features of the compiler and of the
+C library they were building, so they could build the same code over different
+operating systems and platforms.
</para>
<para>
-When the complexity of the software started to arise, to autoconf it
-was added a software to make simpler writing the makefiles, too, which
-is automake. But one of the most complex problems was writing shared
-libraries (or rather shared objects are they are called in UNIX
-world), because the rules for those might change a lot between
-operating systems and compilers: position independent code, shared
-object names, compiler switches and so on. To resolve this issue, GNU
-libtool was created.
+However, as software grew more complex, the need arose for a simpler method of
+writing makefiles was added to autoconf: automake. One of the most complex
+problems was writing shared libraries (or rather shared objects are they are
+called in UNIX world), because the rules for those might change a lot between
+operating systems and compilers: position independent code (PIC), shared object
+names, compiler switches, and so on. To resolve this issue, GNU libtool was
+created.
</para>
<para>
-Unfortunately considered the complexity and the variety of the rules,
-GNU libtool ended up being a very complex piece of software, and to
-make it worse, it had to be written in a portable sh subset, which can
-be difficult to read, not only to write, and then problems and errors
-in code aroused, obviously.
+Unfortunately, given the complexity and variety of the rules, GNU libtool ended
+up being a very complex piece of software, and to make it worse, it had to be
+written in a portable sh subset, which can be difficult to read, let alone
+write, and led to problems and errors in code.
</para>
<para>
-For this reason, Gentoo Linux had always to cope with many problems
-that were caused by software whose package was prepared with a broken
-version of GNU libtool... some problems were caused by simple
-non-portable syntaxes, others by unsafe permissions on temporary
-files, or because libtool didn't support some targets present and
-supported in Gentoo (like uClibc), or again because we want to
-bend the default rules to suit our needs better (for Gentoo/FreeBSD
-for instance).
+Because of these issues, Gentoo Linux has always had to deal with packages that
+were prepared with broken versions of libtool. Some problems were caused by
+non-portable syntaxes, others by unsafe permissions on temporary files, or
+because libtool didn't support some targets present and supported in Gentoo
+(such as uclibc), or because we want to bend the rules to better suit our needs
+(Gentoo/FreeBSD for example).
</para>
<para>
-To avoid having to patch all and every package with a similar patch to
-fix libtool misbehavious, libtool.eclass and elibtoolize functions
-were created. This eclass uses the patches present in the ELT-patches
-directory, trying them one by one, to fix libtool for what we need.
+To avoid having to patch each and every package with a similar patch to fix
+libtool misbehaviors, the libtool.eclass and elibtoolize functions were created.
+The eclass uses patches present in the ELT-patches directory and tries them one
+by one to fix libtool.
</para>
<para>
-Unfortunately there are issues with this design: we're bound to the
-portage tree for the patchsets, there's a logical size limit because
-we're using the Portage Tree itself as a patch repository, and the
-changes to patches and behaviour go live directly on all the ebuilds
-at the same time, so there's no prope way to get a patch in "testing".
+Unfortunately, there are issues with this design: we're bound to the Portage
+tree for the patchsets, there's a logical size limit because we're using the
+Portage tree itself as a patch repository, and the changes to patches and
+behavior go live directly on all the ebuilds at the same time, so there's no
+proper way to get a patch in "testing."
</para>
<para>
-And even if the eclass was created thinking about libtool, there are
-many use cases that could be handled in a similar way, because there
-are classes of packages that simply suffer from a common problem that
-can be fixed with a simple similar patch (KDE packages, proper GNU
-packages, GNOME packages, ...).
+Even though the eclass was created with libtool in mind, there are many use
+cases that could be handled in a similar way, because there are classes of
+packages that suffer from a common problem that can be fixed with a simple
+similar patch. (KDE packages, proper GNU packages, GNOME packages, etc.)
</para>
<para>
-Beside the technical issues, there are also a few maintainership
-issues, as the libtool eclass is pretty complex, and there is no
-maintainer currently appointed to take care of it; this means that if a
-problem arise or a new patch has to be added, someone has to try to
-get a clue about the eclass to start with.
+Beside the technical issues, there are also a few maintainership issues, as the
+libtool eclass is pretty complex, and there is no maintainer currently appointed
+to take care of it. This means that if a problem arises or a new patch has to
+be added, someone has to first learn about the inner workings of the eclass.
</para>
<para>
-To fix these issue and to improve the points where there's space to
-improve, the autoepatch project started, with the objective to provide
-a simpler implementation for an elibtoolize workalike program,
-disengaged from eclasses and the portage tree, that could be hooked up
-inside Portage itself, so that ebuilds haven't to be aware of its
-presence anymore.
+To fix these issues, the autoepatch project was created with the objective to
+provide a simpler implementation for an elibtoolize workalike program,
+disengaged from eclasses and the Portage tree, that could be run from inside
+Portage itself, so that ebuilds don't need to be aware of its presence.
</para>
</sect1>
@@ -88,55 +79,50 @@ presence anymore.
<title>Reasoning for a standalone package</title>
<para>
-There are many ways to accomplish the same result. Why the choice was
-done toward a standalone package, that would require a new ebuild, and
-a tarball, and so on? There are a series of reasons why this approach
-is probably the best compromise between the weight of maintainership
-and the ability to do changes without involving all the users at once.
+There are many ways to accomplish the same result. Why create a standalone
+package that would require a new ebuild, a tarball, and so on? This approach is
+probably the best compromise between the weight of maintainership and the
+ability to make changes without involving all the users at once.
</para>
<para>
-The current method, of storing both the logic code and the patches on
-the same CVS module used for the portage tree, and thus on the RSync
-servers, is obviously flawed: the eclass has to know the PORTDIR path,
-there's no way to overlay the patches if one has to be changed for
-some reason; the code applies to all users at the same time, as the
-eclass is not versioned for stable and testing branches; the size of
-patches and logic code is restricted, because the size of the CVS tree
-is a main concern, as it already increases with the increase of the
-number of packages available; there's no security because neither the
-eclasses nor the patches are signed or signable (at the current time
-at least).
+The current method of storing both the logic code and the patches on the same
+CVS module used for the Portage tree (and thus on the rsync servers) is
+obviously flawed. The eclass has to know the PORTDIR path; there's no way to
+overlay the patches if one has to be changed for some reason. Also, the code
+applies to all users at the same time, as the eclass is not versioned for stable
+and testing branches the size of patches. Additionally,the logic code is
+restricted, because the size of the CVS tree is a main concern, as it already
+increases with the increase of the number of packages available. Finally,
+there's no security because neither the eclasses nor the patches are signed or
+signable at this time.
</para>
<para>
-Another option would be to ship the logic code with either a
-standalone package or portage and then ship the patches with the RSync
-tree, but this leaves us with the security issue (although it might be
-possible to find a solution to this), and with the size constraints
-that we have with the current solution. Even if it would be possible
-to just recode the logic to allow a separation between testing and
-stable packages, it would be difficult to tell from an emerge --info
-output what the user is using for a given package.
+Another option would be to ship the logic code with either a standalone package
+or with Portage and then ship the patches with the rsync tree, but this leaves
+us with the security issue and with the size constraints that we have with the
+current solution. Even if it would be possible to just recode the logic to
+allow a separation between testing and stable packages, it would be difficult to
+tell from an emerge --info output what the user is using for a given package.
</para>
<para>
-By using a separate standalone package it is possible to avoid limits
-on the size of both the logic and the patches (that would be on their
-own archive, which could just have a "reasonable size"), it is
-possible to sign the ebuild in the tree, and thus the digest for the
-tarball would be signed too, covering the security issue; there can be
-different versions of the tarball, with different patches, that can
-have different visibility depending on keywords and masked state, and
-it can be easily told by an emerge --info which version of the package
-is used once the profiles are instructed to.
+By using a separate standalone package it is possible to avoid limits on the
+size of both the logic and the patches (that would be on their own archive,
+which could just have a "reasonable size"). Furthermore, it is possible to sign
+the ebuild in the tree, and thus the digest for the tarball would be signed too,
+covering the security issue. Moreover, there can be different versions of the
+tarball -- with different patches -- that can have different visibility
+depending on keywords and masked state, and it can be easily determined by
+emerge --info which version of the package is used once the profiles are
+instructed to.
</para>
<para>
-Probably the worst drawback is that there's the need of a standalone
-repository to contain the logic and the patches, but also this can be
-considered an advantage as that allows us to branch it when moving to
-a stable target.
+Probably the worst drawback is that there needs to be a standalone repository
+containing both the logic and the patches, but this can be considered an
+advantage as that allows us to branch it when moving to a stable target.
</para>
</sect1>