summaryrefslogtreecommitdiff
blob: b407a4f758156da16a16b8623300dba212c13811 (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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
# Copyright 1999-2022 Gentoo Authors
# Copyright 2016-2019 Amy Liffey
# Copyright 2016-2021 Mikle Kolyada
# Copyright 2021-2022 Joonas Niilola
# This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License.
# https://creativecommons.org/licenses/by-sa/3.0/

Ebuild maintainer quiz

Answer in whatever length necessary for completeness.
Support your answers with documentation links and your personal contributions:
show your commits / pull requests which have dealt with subjects related to 
question at hand, reference PMS where appropriate, and rather provide your
thought process instead of copying direct page content from the devmanual.
Consult your mentor if you're unable to locate answers.

Do not discuss these questions and their answers in public. Do not publish or
share any private conversation with your mentor or recruiter.


*** PART I Organizational structure questions

1. When is it appropriate to post to the following mailing lists: gentoo-core,
   gentoo-dev, gentoo-dev-announce, gentoo-project? Provide examples of topics
   that are appropriate for each one of them.

docs: gentoo.org

2. Who should be contacted with complaints about specific developers or
   projects? Shortly explain the procedure including all levels of appeal.

docs: comrel policy

3. What is the proper method for suggesting a wide-ranging feature or
   enhancement to Gentoo? Describe the process for getting this feature
   approved and implemented.

docs: GLEPs

4. What is the purpose of the Gentoo Council?

docs: GLEPs

5. What is the Gentoo Foundation? How does one apply for membership and
   who are eligible?

docs: gentoo.org

6. What are projects? Who can start a new Gentoo project and how is it done?
   What is the rationale behind this structure?

docs: devmanual, GLEPs

7. What is the devaway system? When should it be used and how to use it?

docs: wiki

8. What are the differences between the devmanual, PMS, and GLEPs?
   What is PMS and what does it cover? What other widely adopted guides /
   canonical resources are there?

docs: devmanual, GLEPs, PMS, wiki, policy guide


*** PART II Ebuild technical/policy questions

1. You change a package's ebuild to install an init script. Previously,
   the package had no init script at all.
   Is a revision bump necessary? Why? What about when adding a patch?
   What about when adding a dependency?

docs: devmanual

2. A user submits a "live" VCS (git, svn ...) ebuild in order to obtain
   a bugfix that has not been released yet. What would be a preferable
   alternative to such an ebuild? What if there are numerous changes
   involved?

docs: devmanual

3.a. What is repoman? When should it be used? How would you check for QA
     problems with repoman?

docs: devmanual, wiki

3.b. A user submits a brand-new ebuild for a new package. What are
     the proper steps (including repoman commands) to take to add
     this ebuild to ::gentoo repository? What should be in the commit message?

docs: devmanual, wiki

4. A user submits an ebuild that has numerous technical problems and
   violates policy. How would you handle that situation?

docs: devmanual

5. You have a set of new ebuilds that could potentially benefit
   from a global USE flag. What steps should be taken before
   a new USE flag is implemented? What should be done if the
   USE flag only applies to a single package?

docs: devmanual

6. What steps are needed to remove a use flag from an ebuild?

docs: common sense

7. You are creating an ebuild. Unfortunately, the default 'emake
   DESTDIR="${D}" install' call causes numerous access violations.
   What are the best long-term and short-term solutions?

docs: devmanual

8. You are creating an ebuild that needs a patch. The patch is
   nontrivially large - bigger than 20 KiB. Where should
   the patch be kept?

docs: devmanual

9.a. You wish to have an ebuild marked "stable," taking it out of
     ~ARCH KEYWORDS. It's a library. What steps should be taken to do so?

docs: devmanual

9.b. You wish to mark an ebuild "testing," putting it into ~ARCH
     KEYWORDS. It was previously hard-masked in package.mask.
     What should be done prior to doing so?

docs: devmanual

9.c. You wish to have an ebuild marked "stable." It is a popular
     application, but no other ebuilds depend on it.
     How would you handle it?

docs: devmanual

10. List all available dependency classes (DEPEND, RDEPEND etc) and explain
    their individual purpose. Provide examples of their typical uses.

docs: devmanual, PMS

11. You wish to make a change to an ebuild, but you checked the commit
    messages and metadata.xml and it appears to be maintained by someone
    else. How should you proceed?

docs: devmanual

12.a. You find a situation in which an eclass may be useful. What should
      you do before implementing such an eclass?

12.b. What is EXPORT_FUNCTIONS? How should it be used?
      Provide examples of its usage.

docs: devmanual

13. How can you verify an ebuild has correct run time dependencies
    (RDEPEND) for all installed binaries? Provide an example tool calls.

docs:

14. How do you deal with a situation in which an ebuild tries to
    install a file that is already installed by another package?

docs: devmanual

15. Most configure scripts attempt to automatically determine
    settings based on the host system. When should the ebuild
    specifically override settings?

docs: devmanual

16. What is the EAPI version? How does it affect ebuilds and eclasses?

docs: devmanual, PMS

17. What is the procedure for removing packages from the tree?

docs: devmanual

18. How do keywording and stabilization policies for less often used arches
    like ppc64 or mips differ from the more common ones like amd64?

docs: devmanual

19. You are adding a new major version to the tree that requires users to
    follow an upgrade guide. How will you communicate this to the users?

docs: GLEPs

20. What are sub-slots and their binding operators? What problem do they
    solve in gentoo and when should be used? Provide examples.

docs: wiki, portage documentation

21.a. You are about to add a new package. How would you determine the correct
      LICENSE? What sources should be consulted for license information,
      and which take precedence?

docs: devmanual

21.b. You are creating an ebuild for a package whose license does not match
      any of the licenses in the 'licenses' directory. What is the proper
      course of action?

docs: GLEPs, devmanual

21.c. The package frobnicate has a 'COPYING' that exactly matches GPL-3.
      However, all the source files have the following copyright notice:


      This program is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published by
      the Free Software Foundation; either version 2 of the License, or
      (at your option) any later version.

      What should be the value of LICENSE variable for this package?

docs: devmanual

21.d. The package installs both frobnicate executable (licensed GPL-3+)
      and libfrobnicate shared library (licensed LGPL-2.1+). What should
      be the correct value of LICENSE for this package?

docs: devmanual

21.e. The package installs frobnicate executable whose sources indicate GPL-3+
      license. However, you notice that the build process creates a local
      static libport.a library that is used to build a part of frobnicate
      but is not meant to be installed. The sources of libport.a indicate
      LGPL-2.1+ license. What should be the value of LICENSE for this package?

docs: devmanual

21.f. A MIT-licensed package includes a CDDL-licensed script. The script is
      not installed but it is used during build to generate a Makefile. What
      should be the value of LICENSE for this package?

docs: devmanual

21.g. A BSD-licensed package installs a frobnicate executable. However, after
      inspecting the package sources you notice that it uses a single source
      file whose license indicates GPL-2+. What would you do? What could be
      the LICENSE for this package?

21.h. You are writing an ebuild for a package written in either Rust or Go
      programming language, how do you approach writing correct LICENSE value
      in your ebuild? The main project is licensed as MIT.


*** PART ||| Code questions

1. You are writing an ebuild for the foomatic package. Upstream calls
   the current version "1.3-7b" (but this is _not_ a beta release).
   How would the ebuild be named? What's wrong with the ebuild
   snippet below and how should this be written to aid
   maintainability?

  SRC_URI="https://foomatic.example.com/download/foomatic-1.3-7b.tar.bz2"
  S=${WORKDIR}/foomatic-1.3-7b

docs: devmanual

2. You have a patch for foomatic which adds TLS support using OpenSSL.
   The dependency is optional and controlled at build time.
   Assuming that foomatic uses an autotools based build system
   provide most probable changes required in an EAPI=7 ebuild.

docs: devmanual

3. What's the difference between global and phase scope in an ebuild?

docs: PMS

4. Why should an external application (for example sed/grep) not be
   called in global scope? What alternative methods can be used?

docs: devmanual

5. What is wrong with using $(somecommand) or `somecommand` or $ARCH
   inside SRC_URI, DEPEND, etc?

docs: devmanual

6. Explain what's incorrect about the following code snippets and suggest
   an alternative.

6.a
  # Upstream does not support user-specified CFLAGS
  unset CFLAGS

docs: devmanual

6.b
  # Extra settings for when SSL is enabled
  if [ "`use ssl `" ] ; then
   # blah
  fi

docs: devmanual

6.c
  # Extra options for configure
  use jpeg && myconf="--enable-jpeg" \
   || myconf="--disable-jpeg"
  use png && myconf="${myconf} --enable-png" \
   || myconf="${myconf} --disable-png"
  use gif && myconf="${myconf} --enable-gif89a" \
   || myconf="${myconf} --disable-gif89a"
  econf ${myconf}

docs: devmanual

6.d
  # If we USE foo, we need to DEPEND upon libfoo. Unfortunately
  # libfoo is completely broken on some archs
  DEPEND="!x86? ( !amd64? ( !ppc? ( foo? ( >=dev-libs/libfoo-1.2 ) ) ) )"

docs: devmanual

7. What is the 'Gentoo way' of globally setting environment variables
    for all users? How is this accomplished in ebuilds?

docs: devmanual

8. Which directory should manual (man) pages be in and how should they
    be installed from an ebuild?

docs: PMS

9. On Gentoo Linux systems, what is the purpose of /usr/local/bin?

docs: devmanual

10. When should you use || die "msg" with commands/functions? Would you
    rewrite the following snippets, and if yes, how?

10.a.
    use fnord && ( emake fnordification && cp fnordification bar/ || die )

10.b.
    emake docs || die

10.c.
    my_custom_function() {
        cd "${S}"/ext1
        ./ext1.sh
        cd "${S}"/ext2
        ./ext2.sh
    }

    src_prepare() {
        default
        my_custom_function || die
    }

docs: devmanual

11.a. You are committing a new package to the tree. What will you have in
      the KEYWORDS variable?

docs: devmanual

11.b. You are bumping foomatic's ebuild from version 1.2 to version
      1.3. The new release contains bugfixes and new
      functionality. The current KEYWORDS for 1.2 are
      "x86 sparc ~mips amd64" -- what will KEYWORDS be for
      the new 1.3 ebuild?

docs: devmanual

11.c. You are bumping foomatic's ebuild from version 1.3 to 1.4. The
      new release extends functionality and introduces a new
      dependency on libfnord version 1.2 or later. The
      KEYWORDS for foomatic-1.3 are "x86 sparc ~mips amd64"
      and the KEYWORDS for libfnord-1.2 are "x86 ~sparc" --
      what will you do?

docs: devmanual

11.d. You are bumping foomatic's ebuild from version 1.4 to 1.5. This
      release introduces new optional support for the libgerbil
      library, which you are controlling via the gerbil global
      USE flag. Unfortunately libgerbil is full of code which
      doesn't work properly on big endian systems, and so has
      "-sparc -mips" in the KEYWORDS. How will you handle this?

docs: devmanual

11.e. You are bumping foomatic's ebuild from version 1.5 to version
      2.0. This new version is a massive rewrite which introduces
      huge changes to the build system, the required libraries
      and how the code works. What will you do for KEYWORDS here?

docs: devmanual

12. Your package fails to build with older versions of GCC (e.g. GCC < 4.7).
    How do you ensure that the user uses an appropriate compiler to build the
    package? Under which circumstances should you avoid this check and how?

docs: devmanual

13. When should USE flags be used? What are the cases where they should be
    avoided? Consider the following examples. Explain what is wrong in them
    and how would you improve them.

docs: devmanual, common sense

13.a. A large C++ application with long build time has:

  # libcxx can be optionally used at run time via -stdlib=libc++
  IUSE="libcxx"
  DEPEND=""
  RDEPEND="libcxx? ( dev-libs/libcxx )"

13.b. A large package with long build time has:

  inherit bash-completion-r1
  IUSE="bash-completion"

  src_install() {
    default
    use bash-completion && dobashcomp contrib/bash-completion/foo
  }

13.c. A package unconditionally installs 'foobar' executable which links
      to libbar. The ebuild maintainer wanted to make it optional.
      He used the following code:

  IUSE="foobar"
  RDEPEND="foobar? ( dev-libs/libbar )"
  DEPEND="${RDEPEND}"

  src_install() {
    default
    if ! use foobar; then
      rm "${ED}"/usr/bin/foobar || die
    fi
  }

13.d. A package has numerous configure switches which control a number
      of optional features. All of them are enabled by default. They do
      not have any external dependencies, and do not affect the package
      size significantly. The ebuild author has added over 20 local USE
      flags to control all of them.



*** Please also submit the following information:

* Please make sure your OpenPGP public keyblock is available on the keyserver network
  hkp://pool.sks-keyservers.net and provide the fingerprint of it below
  You should sign your quizzes with your key
  https://wiki.gentoo.org/wiki/Project:Gentoo-keys/Generating_GLEP_63_based_OpenPGP_keys
  https://wiki.gentoo.org/wiki/GnuPG

* SSH public key (if you do not have one, please create one)
  https://wiki.gentoo.org/wiki/Project:Infrastructure/SSH_Key_Guide
  If you don't paste your key inline, make sure it's signed by your
  gpg key.

* Date of birth

* Where do you live (Town/City, Country)

* What are your programming/scripting skills, if applicable?

* What other areas are you experienced in?

* What other projects have you contributed to, if any?

* Tell us about yourself. This doesn't need to be strictly
  computer-relevant; things like where you're from,
  hobbies, job, family, interests... This information will be used
  for your public new developer announcement so please mention if
  something should not be part of that.