Contents of /xml/htdocs/proj/en/glep/glep-0037.txt

Parent Directory Parent Directory | Revision Log Revision Log

Revision 1.2 - (show annotations) (download)
Tue Sep 5 20:54:30 2006 UTC (12 years, 6 months ago) by g2boojum
Branch: MAIN
Changes since 1.1: +11 -4 lines
File MIME type: text/plain

1 GLEP: 37
2 Title: Virtuals Deprecation
3 Version: $Revision: 1.1 $
4 Last-Modified: $Date: 2005/04/30 22:35:58 $
5 Author: Jason Stubbs <jstubbs@gentoo.org>
6 Status: deferred
7 Type: Standards Track
8 Content-Type: text/x-rst
9 Created: 30-April-2005
10 Post-History: 30-April-2005, 5-Sep-2006
13 Status
14 ======
16 What has been implemented so far diverges somewhat from what is
17 stated in this GLEP. As such, this GLEP (in its current form)
18 has been marked "deferred".
20 Credits
21 =======
23 Most ideas in this GLEP came out of discussion with Thomas de Grenier de
24 Latour. Ciaran McCreesh, Brian Harring and Stephen Bennett have also provided
25 help in fleshing out the idea.
28 Abstract
29 ========
31 This GLEP covers the pitfalls of the current virtuals system, the benefits of
32 using regular ebuilds to serve the purpose of virtuals and what needs to be
33 supported to make it viable.
36 Motivation
37 ==========
39 The current virtuals system is decentralized; that is there is no way to find
40 information about a specific virtual other than to scan all packages for what
41 they provide. There is also no way to tell whether an atom is a virtual or
42 not - yes, the "virtual/" prefix could have been used but it isn't which has
43 led to its abuse.
45 What this means is that portage must scan all installed packages for the
46 virtuals they provide, that profiles must provide a default for every single
47 virtual that portage might encounter and that every single atom that portage
48 processes must be checked against the list of virtuals. Needless to say that
49 this causes quite a performance decrease.
51 The current virtuals system also has some other major shortcomings. The most
52 well known case is virtual/jdk and kaffe. Kaffe-1.1.4 implements the Java 1.4
53 API but can not satisfy a package that requires >=virtual/jdk-1.4 because
54 kaffe's versioning scheme differs. (ED: Need to add some more here. ;)
57 Specification
58 =============
60 This GLEP recommends that virtuals become no different to regular packages.
61 Specifically, the standard virtual would include the DESCRIPTION, KEYWORDS,
62 IUSE and RDEPEND metadata. An example would be something like this::
64 DESCRIPTION="Java Development Kit 1.4"
65 KEYWORDS="amd64 hppa ia64 ppc ppc64 sparc x86"
66 RDEPEND="|| (
67 =dev-java/blackdown-jdk-1.4\*
68 =dev-java/ibm-jdk-bin-1.4*
69 =dev-java/jrockit-jdk-bin-1.4*
70 =dev-java/kaffe-1.1.4*
71 =dev-java/sun-jdk-1.4*
72 )"
73 IUSE=""
75 However, there are some issues that have been brought up with doing this.
78 Consistency
79 -----------
81 Presently, it is very easy to remove packages even if others are dependent
82 on them, which can lead to broken emerges when packages rely on indirect
83 dependencies. For example, if kdelibs is merged bringing in qt and then
84 qt is unmerged, attempting to merge kdebase will likely fail. This becomes
85 a much bigger problem with virtuals as packages because the dependencies
86 are always indirect.
88 The resolution for this issue will be to add full dependency tracking and
89 verification to portage. The details of how it will be done are outside the
90 scope of this GLEP, but essentially this means that portage will need to be
91 forced to unmerge a package that is depended on by another and will also be
92 able to scan and fix any broken dependencies.
95 Overrides
96 ---------
98 Profiles currently specify the default provider of each virtual and users are
99 able to override these defaults using /etc/portage/profile/virtuals. If
100 virtuals are replaced by regular packages and thus able to have arbitrarily
101 complex DEPENDs, the current method of overriding default virtuals can not
102 be extended to support this.
104 Before looking at a solution, lets look at how the current system works. When
105 portage initializes, it searches installed packages for available virtuals.
106 It then searches profiles and user overrides and adds them to the available
107 providers list and/or changes the order of the providers so that overrides are
108 listed earlier. Portage then expands any virtual atom it finds into an OR
109 list using the order decided upon at initialization.
111 To keep this behaviour available, this GLEP proposes a new file named
112 package.prefer. In its basic form, this is just a list of package names
113 ordered by preference. Portage would use it by reordering the atoms of any
114 OR list it processes to fit the order given by package.prefer. For example,
115 if package.prefer contained "dev-java/kaffe" then:
117 ::
119 || (
120 dev-java/blackdown-jdk
121 dev-java/sun-jdk
122 dev-java/kaffe
123 )
125 would be processed as:
127 ::
129 || (
130 dev-java/kaffe
131 dev-java/blackdown-jdk
132 dev-java/sun-jdk
133 )
135 In its basic form, package.prefer already covers profile and user overrides.
136 However, this GLEP proposes that any type of atom be usable. This will be
137 accomplished by checking for intersections of the atoms in the OR list and
138 atoms in the preferred list. When an intersection is found, both atoms
139 would be specified in a sublist, which would then be treated as a ranged dep.
140 For example, if package.prefer contained "<=dev-java/sun-jdk-1.4" then:
142 ::
144 || (
145 >=dev-java/blackdown-jdk-1.3
146 >=dev-java/sun-jdk-1.3
147 )
149 would be processed as:
151 ::
153 || (
154 (
155 <=dev-java/sun-jdk-1.4
156 >=dev-java/sun-jdk-1.3
157 )
158 >=dev-java/blackdown-jdk-1.3
159 >=dev-java/sun-jdk-1.3
160 )
162 Ranged deps are outside of the scope of this GLEP.
165 Rationale
166 =========
168 The number one advantage is that it offers more power to both the user and
169 the developer. Flexibility of virtuals is far greater in this scheme and
170 fulfills requirements that exist already. It also means that the maintainers
171 of profiles will not need to list a default for every virtual. The user
172 benefits by being able to easily gather a list of providers of a virtual as
173 well as their control being extended to allow selection where there is a
174 choice within any package.
176 Portage code also benefits from this scheme as virtuals will no longer
177 require special handling or dual implementations of essentially the same
178 feature, for example USE-based PROVIDEs. This scheme is also much easier to
179 optimize which will benefit the processing of all packages. It also means
180 that any additions to the DEPEND vocabulary become available for use in the
181 definitions of virtuals.
184 Backwards Compatibility
185 =======================
187 Compatibility will begin by making treat unknown virtuals like
188 regular packages. When the tree is stripped of PROVIDEs and "virtuals"
189 override files, the only virtuals that these portages will use are those that
190 the user has specified and those gleaned from installed packages. Any
191 unknown virtual will be treated like a regular package and looked for in the
192 tree.
194 The next major version of portage (2.1.0) will support consistency
195 checking. The only remaining issue is that of user overrides. The old
196 method will work even with new style virtuals. The only catch is that
197 complex virtuals - that is virtuals that will install more than one package -
198 may not be overridable satisfactorally.
200 Dropping of support of current style virtuals is planned for the following
201 major version of portage (2.2.0). When the time comes to release it, scripts
202 will be written to create packages from the existing virtuals system as well
203 as to create appropriate package.prefer overrides within the profiles.
206 Copyright
207 =========
209 This document has been placed in the public domain.

  ViewVC Help
Powered by ViewVC 1.1.20