summaryrefslogtreecommitdiff
path: root/docs/html/pk-faq.html
blob: 4d5f43db4f94062f090caac802061f1e5b09e3b1 (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
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>PackageKit - Frequently Asked Questions</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
</head>
<body>

<table align="center" class="title">
<tr>
 <td><center><img src="img/packagekit.png" alt=""/></center></td>
 <td width="95%" valign="middle"><p class="title">Frequently Asked Questions</p></td>
 <td><center><img src="img/packagekit.png" alt=""/></center></td>
</tr>
</table>

<p>Back to the <a href="index.html">main page</a></p>

<h1>Frequently asked questions</h1>

<h2>Table Of Contents</h2>
<ul>
<li><a href="#how-complete">How complete are the backends?</a></li>
<li><a href="#repo-add-remove">Why can't I add or remove software sources</a></li>
<li><a href="#catalogs">What's a package catalog?</a></li>
<li><a href="#markup">Can I include formatting characters in package descriptions?</a></li>
<li><a href="#1-click-install">Does PackageKit support 1-Click Install?</a></li>
<li><a href="#command-not-found">How does the command not found functionality work?</a></li>
<li><a href="#run-as-root">When run as root, gpk-application and pkcon do not work!</a></li>
<li><a href="#session-system">Why is there a session service and and a system service?</a></li>
<li><a href="#session-methods">How do I use PackageKit in my application?</a></li>
<li><a href="#rawhide-updates">Why don't I get update details with Fedora Rawhide?</a></li>
<li><a href="#selinux">Why doesn't PackageKit work with SELinux?</a></li>
<li><a href="#tray-icons">What do the tray icons mean?</a></li>
<li><a href="#no-percentage-updates">What if we don't support percentage updates?</a></li>
<li><a href="#remaining-times">Why are the remaining times sometimes wildly wrong?</a></li>
<li><a href="#different-options">How will PackageKit support all the different options?</a></li>
<li><a href="#error-codes">Error codes are different on each backend?</a></li>
<li><a href="#user-interaction">Installing packages needs user interaction!</a></li>
<li><a href="#up2date">Does PackageKit replace up2date?</a></li>
<li><a href="#system-daemon">Is PackageKit a system daemon, always running and using resources?</a></li>
<li><a href="#dependencies">How does PackageKit handle dependencies?</a></li>
<li><a href="#rcd">Does PackageKit replace the Red Carpet service?</a></li>
<li><a href="#how-fast">How fast is PackageKit?</a></li>
<li><a href="#multiple-users">How does PackageKit work with multiple users?</a></li>
<li><a href="#use-existing-tools">Can users still use their normal package managers?</a></li>
<li><a href="#service-pack">What is a Service Pack?</a></li>
<li><a href="#hughsies-law">What is Hughsie's law?</a></li>
<li><a href="#translation">How do I translate gnome-packagekit?</a></li>
<li><a href="#corporate-sponsor">Is there an organization sponsoring development of PackageKit?</a></li>
</ul>

<hr>
<h3><a name="how-complete">How complete are the backends?</a></h3>
<p>
Backends do not have to be complete when they are added to PackageKit.
If a feature is not present then it is hidden in the UI, which will explain why on some
distributions the client tools look a little different to other distributions.
You can see the latest feature matrix <a href="pk-matrix.html">here</a>.
</p>

<hr>
<h3><a name="repo-add-remove">Why can't I add or remove software sources?</a></h3>
<p>
In the software source viewer you can enable and disable repositories, but you
cannot rename, add or remove them.
This is a deliberate design choice chosen for the following reasons:
</p>
<ul>
<li>The mirrorlist and source URL formats are very different between distributions</li>
<li>There are better ways of adding sources, for instance installing the <code><i>repo</i>-release.rpm</code> package which also adds the GPG keys</li>
<li>Removing the <code>repo-release.rpm</code> removes the repo and any temporary files</li>
<li>Renaming a repo has no purpose</li>
</ul>

<h3><a name="catalogs">What's a package catalog?</a></h3>
<p>
There's one use case that I'm very interested in, and that is getting new users with the correct
environment to build and start hacking on software or using other software tools.
For instance, on <a href="http://www.packagekit.org">www.packagekit.org</a> in the FAQ section,
we can have a link to install build files to <a href="packagekit.catalog">start hacking on PackageKit</a>.
</p>
<p>
Now, this <code>.catalog</code> file is handled by <code>gpk-install-catalog</code> that parses
this file and causes the appropriate packages to be installed if they are not already installed.
This rocks as we can get GTK+, Xorg hackers up to speed with the minimum of fuss and confusion.
It also lets people put links on webpages to <i>install all the stuff you need</i> when writing a
<i>How to use a scanner in GIMP</i> howto.
</p>
<p>
So, what does a .catalog file look like?
</p>
<pre>
[PackageKit Catalog]

# Just a package on all versions of fedora that can provide the dependency.
# If there are multiple packages then the user will be asked to choose
InstallProvides(fedora)=audio/QCELP

# Just for Fedora 9, install two development files
InstallPackages(fedora-9)=glib2-devel;PolicyKit-gnome-devel

# On any distro, install the package with this file
InstallFiles=/usr/bin/fontinst

# For each architecture on Fedora 8, install one of the two different compat files
InstallFiles(fedora-8-i686)=/usr/lib/pango/1.6.0/modules/pango-arabic-fc.so
InstallFiles(fedora-8-x64)=/usr/lib64/pango/1.6.0/modules/pango-arabic-fc.so
</pre>
<p>
You'll notice the <code>distro-id</code> in between the <code>()</code>'s - this lets a packager
fine tune the package name, where for instance in Debian the package is called <code>policykit</code>
and Fedora <code>PolicyKit</code>.
You can specify a granularity of distribution, distribution-version or
distribution-version-architecture - PackageKit will process all the entries that apply.
It's of course better to not specify a <code>()</code> if possible, as this lets the file work on
as many distributions as possible out of the box.
</p>
<p>
There's also no version checking - intentionally - the distro should be specified and have the
correct data.
If there's an optional package not in earlier versions then you can do something like this:
</p>
<pre>
[PackageKit Catalog]

# Fedora 9 does not have Unique
InstallPackages(fedora-9)=glib2-devel;PolicyKit-gnome-devel

# Rawhide is fedora 9.90
InstallPackages(fedora-9.90)=glib2-devel;PolicyKit-gnome-devel;unique-devel
</pre>
<p>
There's also no description of the catalog that needs translating and verifying - they are just
lists of packages, files and provides that might be useful.
All the translations come from the distributions metadata, and it's up to the user to verify the
package lists that are asked to be installed, so there are no signing or trust issues.
</p>
<p>
Note: this isn't designed to replace one click install, it just does something that is similar in
a different way.
</p>
<hr>

<h3><a name="markup">Can I include formatting characters in package descriptions?</a></h3>
<p>
Yes, as long as the descripions are formatted with
<a href="http://en.wikipedia.org/wiki/Markdown">Markdown</a> then the descriptions will be
formatted correctly in client programs.
Using Markdown is a deliberate choice as it does not force the vendor to adopt any specific
markup language.
An example Markdown package description would be:
</p>
<pre>
GNOME Power Manager uses the information and facilities
provided by HAL displaying icons and handling user
callbacks in an **interactive** GNOME session.

The following *GUI* programs are provided:
* `gnome-power-preferences` - set policy and change preferences
* `gnome-power-statistics` - view power graphs and device history
</pre>
<p>
This would be rendered by a text program as:
</p>
<pre>
GNOME Power Manager uses the information and facilities provided by HAL
displaying icons and handling user callbacks in an interactive GNOME session.

The following GUI programs are provided:
* gnome-power-preferences - set policy and change preferences
* gnome-power-statistics - view power graphs and device history
</pre>
<p>
A GUI front-end would format the text like this:
</p>
<table bgcolor="#eeeeee" cellpadding="6px"><tr><td>
<p>
GNOME Power Manager uses the information and facilities provided by HAL displaying icons and handling user callbacks in an <b>interactive</b> GNOME session.
</p>
<p>
The following <i>GUI</i> programs are provided:
</p>
<ul>
<li><code>gnome-power-preferences</code> - set policy and change preferences</li>
<li><code>gnome-power-statistics</code> - view power graphs and device history</li>
</ul>
</td></tr></table>
<p>
Update descriptions are also processed for markdown, for example:
</p>
<img src=img/gpk-markdown.png/>
<hr>

<h3><a name="command-not-found">How does the command not found functionality work?</a></h3>
<p>
The command not found functionality is a bash extension that allows PackageKit
to suggest similar commands, or to offer to install packages to provide commands.
It's probably best to click on the image and watch the video.
</p>
<a href="videos/pk-command-not-found.ogv"><img src=img/pk-command-not-found.png/></a>
<hr>

<h3><a name="1-click-install">Does PackageKit support 1-Click Install?</a></h3>
<p>
No, as they are a potential security problem. The issues are as follows:
</p>
<ul>
<li>
That some developer creates a repository with a package with a higher package epoch, and then the
distro releases a critical security package (with an updated version, but smaller epoch) and the
package does not get upgraded, leaving the user vulnerable.
</li>
<li>
The user installs some random repository, where the developer pushes a few svn packages.
The developer gets bored, and stop produces updates, and then one of the old packages blocks
on the distribution update, causing no further automatic system updates.
</li>
<li>
There's no signing of 1-click-install files, so we can't actually be sure that they come from a
reputable source.
</li>
<li>
There's no localisation in the 1-click-files.
For instance, if we only show a French language speaker a description of "remote exploit trojan"
they are not going to understand the description.
</li>
</ul>
<p>
So what's the solution? Using a standard <code>$vendor-release.rpm</code> or <code>.deb</code>
you can ship the standard repo or source with a signed GPG key.
PackageKit also supports <a href="#catalogs">catalogs</a> which can install sets of files provided by
your distro.
</p>
<p>
Quoting Sebastian Heinlein,
<i>Allowing to easily add third party repositories and install third party software without a
certification infrastructure is like opening the gates to hell.
Most user just don't have got the technical understanding to handle this well.</i>
</p>

<hr>
<h3><a name="run-as-root">When run as root, <code>gpk-application</code> and <code>pkcon</code> do not work!</a></h3>
<p>
GTK+ tools should not be run as the root user, <b>PERIOD</b>.
Any GTK+ program run as the root user is a massive security hole -- GTK+ just isn't designed with
this in mind.
There are <b>numerous</b> attack vectors when running as root, and programs shouldn't do such
insane and insecure things.
</p>
<p>
Please see <a href="http://www.gtk.org/setuid.html">the GTK+ explanation</a> for more rationale.
</p>

<hr>
<h3><a name="session-system">Why is there a session service <b>and</b> and a system service?</a></h3>
<p>
PackageKit runs a process <code>packagekitd</code> that is a daemon that runs per-system.
The daemon lets you schedule transactions using either the raw
<a href="http://gitweb.freedesktop.org/?p=packagekit.git;a=blob;f=src/org.freedesktop.PackageKit.Transaction.xml">
DBUS methods</a>, or using <a href="http://www.packagekit.org/gtk-doc/PkClient.html">libpackagekit</a>.
The transactions are very fine grained, so an application would have to manage
<a href="http://www.packagekit.org/gtk-doc/introduction-ideas-transactions.html">
the transaction process</a> itself.
This would mean handling the EULA and GPG callbacks in each application. This is less than ideal.
</p>
<p>
For this reason, a session helper is provided by the <code>gpk-update-icon</code> process which
basically makes all the complexity go away; it handles all the GPG key authentication and
EULA agreements, and also works with Seahorse and GConf to give some of the settings session persistence.
Using the session service is also designed to be synchronous, which means you can send the DBUS call
and just wait for the result, rather than managing callbacks to update custom GUIs.
</p>
<p>
The session helper therefore depends on the shared code in <code>gpk-update-icon</code>, but
because this is implemented as a DBUS service, can be coded as a QObject for KDE or a simpler
object for XFCE or EFL.
If you want full integration using <a href="http://www.packagekit.org/img/gpk-added-deps.png">
custom dialogs</a> without running the extra session process, then use libpackagekit.
If you don't care, and just want things to <i>work</i> then
<a href="http://www.packagekit.org/pk-faq.html#session-methods">use the session interface</a>.
</p>
<p>
If you want a demo, you can download <a href="files/session.c">session.c</a> for a
session example and <a href="files/system.c">system.c</a> as a system example.
</p>
<p>
Compile with:
</p>
<pre>
gcc -o session -Wall session.c `pkg-config --cflags --libs dbus-glib-1`
gcc -o system -Wall system.c `pkg-config --cflags --libs packagekit-glib`
</pre>

<hr>
<h3><a name="session-methods">How do I use PackageKit in my application?</a></h3>
<p>
If you are using <a href="http://www.gnome.org/">GNOME</a>, or running the
<code>gpk-update-icon</code> then you can use the session dbus interface
provided by this process.
If you are not using GNOME, or choose to not use the <code>gpk-update-icon</code>
applet then you can use an alternate interface provided by your desktop.
</p>
<p>
Using this shared session service you can use the following DBUS methods
to make PackageKit just do the right thing.
All the additional
<a href="http://www.packagekit.org/gtk-doc/introduction-ideas-transactions.html">
confirmation, package downloads, GPG and EULA prompting is done automatically.</a>
</p>
<p>
The DBUS methods are designed to be run syncronously, but can be run
async using <code>dbus_g_proxy_begin_call</code> and then returning on
the <code>DBusGProxyCallNotify</code>.
</p>
<p>
For example, the following code snippet would install a package by name:
</p>

<pre>
#include &lt;dbus/dbus-glib.h&gt;

DBusGConnection *connection;
DBusGProxy *proxy;
GError *error = NULL;
gboolean ret;

connection = dbus_g_bus_get (DBUS_BUS_SESSION, NULL);
proxy = dbus_g_proxy_new_for_name (connection,
                             "org.freedesktop.PackageKit",
                             "/org/freedesktop/PackageKit",
                             "org.freedesktop.PackageKit");
/* execute sync method */
ret = dbus_g_proxy_call (proxy, "InstallPackageName", &error,
                         G_TYPE_STRING, "openoffice-clipart",
                         G_TYPE_INVALID, G_TYPE_INVALID);
if (!ret) {
        g_warning ("failed: %s", error->message);
        g_error_free (error);
}
</pre>
<p>
or in python...
</p>
<pre>
import dbus

try:
    bus = dbus.SessionBus()
except dbus.DBusException, e:
    print 'Unable to connect to dbus: %s' % str(e)
    sys.exit()
try:
    proxy = bus.get_object('org.freedesktop.PackageKit', '/org/freedesktop/PackageKit')
    iface = dbus.Interface(proxy, 'org.freedesktop.PackageKit')
    iface.InstallPackageName('openoffice-clipart')
except dbus.DBusException, e:
    print 'Unable to use PackageKit: %s' % str(e)
</pre>
<p>
The methods available on this interface are:
</p>
<ul>
<li><code>InstallPackageName("openoffice-clipart")</code></li>
<li><code>InstallProvideFile("/usr/share/fonts/sarai/Sarai_07.ttf")</code></li>
<li><code>InstallLocalFile("/home/dave/Desktop/lirc-0.6.6-4.rhfc1.dag.i686.rpm")</code></li>
<li><code>InstallMimeType("application/x-rpm")</code></li>
<li><code>InstallFont("lang(en_GB)")</code></li>
</ul>
<p>
Please email me or the
<a href="http://lists.freedesktop.org/mailman/listinfo/packagekit">mailing list</a>
if you have any other questions
</p>

<hr>
<h3><a name="tray-icons">What do the tray icons mean?</a></h3>
<table>
 <tr>
  <td><img src="img/pk-update-bugfix.png"/></td><td>Bugfix update</td>
  <td><img src="img/pk-update-enhancement.png"/></td><td>Enhancement update</td>
  <td><img src="img/pk-update-high.png"/></td><td>High priority update</td>
 </tr>
 <tr>
  <td><img src="img/pk-update-low.png"/></td><td>Low priority update</td>
  <td><img src="img/pk-update-normal.png"/></td><td>Normal update</td>
  <td><img src="img/pk-update-security.png"/></td><td>Security update</td>
 </tr>
</table>
<p>
<b>NOTE:</b>Not all the icons may show for some backends.
</p>
<p>
If you are using Fedora rawhide then only the bugfix icon will be show due to missing metadata.
In the released versions of Fedora metadata is added to updates and the type of update can be found.
</p>

<hr>
<h3><a name="rawhide-updates">Why don't I get update details with Fedora Rawhide?</a></h3>
<p>
The Rawhide repository does not supply metadata needed for the update-viewer to display extra
information about the update, such as changelogs, CVE and bugzilla references.
Only released versions of Fedora have this metadata.
</p>

<hr>
<h3><a name="selinux">Why doesn't PackageKit work with SELinux?</a></h3>
<p>
The process <code>packagekitd</code> is not recognized by SELinux if you are
using old selinux-policy rules.
Until the policy is updated to handle system activation, you'll have
to run in permissive mode, rather than enforcing.
</p>
<p>
See <a href="https://bugzilla.redhat.com/show_bug.cgi?id=361151">Red Hat Bugzilla</a>
for further information.
</p>

<hr>
<h3><a name="no-percentage-updates">What if the backend package manager doesn't support percentage updates?</a></h3>
<p>
You don't have to have a backend that supports percentage updates.
If you don't know the progress, just emit NoPercentageUpdates and then the UI
should just do the right thing and spin backwards and forwards.
</p>

<hr>
<h3><a name="remaining-times">Why are the remaining times sometimes not present or wildly wrong?</a></h3>
<p>
The remaining time to completion of the transaction is calculated using an
average time of the time between percentage updates points, extrapolated to 100%.
This means that backends that give accurate and frequent percentage-changed
signals will get accurate times.
</p>
<p>
If a backend updates the percentage using very course updates
(e.g. 20%, 40%, 60%, 80%, 100%) then the remaining time algorithm will not
perform well.
Similarly, if the duration of 0% to 50% takes 2 minutes and 50% to 100% takes
10 minutes then at first the time will be reported under the true time to
completion.
It is up to the backends to map the transaction progress to fine-granularity
accurate percentage updates, at least as best as possible.
</p>

<hr>
<h3><a name="different-options">With all the differences between backends, how will PackageKit support all the different options?</a></h3>
<p>
Backends don't have to support all options of all methods.
Just set an error and return false if not implemented.
</p>

<hr>
<h3><a name="error-codes">But error codes are different on each backend?</a></h3>
<p>
Error codes have to be standardized so they can be localized.
The error detail field can just be the untranslatable output.
If you are creating a backend and you need another error enum, mention it
and we can add it to the supported list.
</p>

<hr>
<h3><a name="user-interaction">How will PackageKit handle installation an application that needs user interaction?</a></h3>
<p>
Upgrading, installing or removing packages <b>has to be 100% silent</b>.
</p>
<p>
The user cannot be prompted mid-transaction for questions as these will not be
handled in PackageKit.
The backend should do the right thing, as these questions mean very
little to the average user.
</p>
<p>
The reasons for this are as follows:
</p>
<ul>
 <li>
  The messages cannot be translated as the daemon is running in the C locale,
  and there may be multiple running session clients in different locales.
 </li>
 <li>
  Stopping the transaction and waiting for input would also mean the methods
  are no longer "fire and forget".
 </li>
 <li>
  Security updates can now be performed automatically, i.e.
  when the user is idle.
  There's no user at the console in this case to answer questions.
 </li>
 <li>
  Due to the client/server split of PackageKit, a non-root user would be able
  to change the answer of debconf scripts, and another PolicyKit role would have
  to be defined.
  In this case a situation could arise where a user is able to update software,
  but not agree to EULAs, thus making the transaction invalid and impossible.
 </li>
</ul>
</p>
<p>
EULAs or other agreements will have to be agreed to <b>before</b> the
transaction is processed using the <code>EulaRequired</code> signal.
EULAs should preferably be shown per-user - i.e. the first time an application is run.
</p>
<p>
PackageKit will not install packages with broken maintainer scripts that
require a stdin.
<a href="http://www.debian.org/doc/debian-policy/ch-binary.html#s-maintscriptprompt">Debian</a>
policy clearly says that prompting on <code>stdin</code> instead of using debconf is deprecated.
If this is attempted the backend should detect this and error out of the
transaction with <code>PK_ERROR_ENUM_BROKEN_PACKAGE</code>.
<b>We cannot and will not ask the user for random standard input.</b>
</p>
<p>
See the <a href="http://wiki.debian.org/PackageKit">Debian PackageKit wiki</a>
for more details and further discussion.
</p>
<p>
If the transaction needs to tell the user something, the <code>Message()</code>
method can be used that will localise the message up the stack, and also give the user a way
of ignoring duplicate messages of this type.
</p>

<hr>
<h3><a name="up2date">Does PackageKit replace up2date?</a></h3>
<p>
PackageKit does not replace up2date.
PackageKit is a way for users to interact with the packaging system, not for an
administrator to install software on remote machines.
</p>

<hr>
<h3><a name="system=daemon">Is PackageKit a system daemon, always running and using resources?</a></h3>
<p>
PackageKit is not yet another system daemon.
It quits when not doing anything, and only starts when something wants
information or a task completed.
</p>

<hr>
<h3><a name="dependencies">How does PackageKit handle dependencies?</a></h3>
<p>
PackageKit <b>does not do</b> dependency resolution.
This problem has already been solved by the backend systems and we don't really
want to re-invent the wheel.
</p>
<p>
PackageKit does not have the fine-grained API to do everything.
For instance, synaptic should still use libapt as can do much more than can be
provided by PackageKit.
</p>

<hr>
<h3><a name="rcd">Does PackageKit replace the Red Carpet service?</a></h3>
<p>
PackageKit is not a replacement to red carpet.
Red carpet was really great and years ahead of it's time, but tried to do
everything package related on the system, and moved onto the enterprise
centralized management model.
Although cool, this latter point made things too political in my opinion.
</p>

<hr>
<h3><a name="how-fast">How fast is PackageKit?</a></h3>
<p>
PackageKit is really fast.
It takes about 1 second to search for installed and available packages
with "power" in the description - no blocking of the UI happens at all as it's
all asynchronous.
All the applications start instantly with no root password needed at startup.
</p>

<hr>
<h3><a name="multiple-users">How does PackageKit work with multiple users?</a></h3>
<p>
PackageKit is designed from the ground up to work with fast user switching and
logging in and out of sessions during upgrades.
You can start a system upgrade, log out, log in as another user, and be notified
when the upgrade is complete, all without risking your rpmdb.
</p>

<hr>
<h3><a name="use-existing-tools">Can users still use their normal package managers and backends, such as Yum, APT or Conary?</a></h3>
<p>
PackageKit does not stop you using the low level tools yourself.
You can use rpm and yum or dpkg and apt when PK is inactive (99.999% of the time)
when you really need some command line love.
No more fighting over <code>yum</code>, <code>yum-updatesd</code>,
<code>pup</code> and <code>pirut</code>.
</p>

<hr>
<h3><a name="service-pack">What is a Service Pack?</a></h3>
<p>
A service pack is a tarball which contains the particular package and its dependencies.
The user can select the dependencies to be packed using the --with-package-list option.
Along with the dependencies, a service pack has a file named metadata.conf which contains
the distribution name and version and the date of creation of the pack.
Service packs are generated using the command line client <code>pkgenpack</code>.
</p>

<hr>
<h3><a name="hughsies-law">What is Hughsie's law?</a></h3>
<p>
A joke that started on IRC late one night in '07.
Put formally it is: <i>Authentication or license prompts can only be done before the
transaction has started, and messages or notices about the transaction
can only be shown after the transaction has completed.</i>
</p>

<hr>
<h3><a name="translation">How do I translate gnome-packagekit?</a></h3>
<p>
See the <a href="http://l10n.gnome.org/teams">GNOME Translation Team</a>
web pages for how to contribute to GNOME localisation.
</p>

<hr>
<h3><a name="corporate-sponsor">Is there an organization or corporation sponsoring development of PackageKit?</a></h3>
<p>
PackageKit is not sponsored by anyone.
Whilst interning at Red Hat in '07 I spent a few days on the API and some UI designs,
but all the coding is done in my free time.
I now work at Red Hat full time.
</p>

<p>Back to the <a href="index.html">main page</a></p>

<!-- space for the links to be at the top -->
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br>

<p class="footer">
 Copyright <a href="mailto:richard@hughsie.com">Richard Hughes 2007-2009</a><br/>
 <a href="http://validator.w3.org/check/referer">Optimized</a>
 for <a href="http://www.w3.org/">standards</a>.
</p>

</body>
</html>