Fedora Core 4

Jeff Spaleta jspaleta at gmail.com
Wed Jan 19 17:52:05 UTC 2005


On Wed, 19 Jan 2005 14:38:22 -0200, Gustavo Niemeyer
<niemeyer at conectiva.com> wrote:
> That's exactly the idea. We're all in the same boat, looking at
> the same issues from different angles. Smart has algorithms to
> choose a better possibility given the available options. Jeff
> seems to be looking for a debug tool to detect broken
> distributions.

Actually... im not looking for a debugging tool. I'm looking to find a
balance between ultimate flexibility and robustness in the face of
packaging errors in a way that protects novice users from errors in
situations where errors are obvious based on our human understanding
of how a channel is suppose to operate.  I think we can all pretty
much agree that if a Core updates-released package requires the
removal of a Core package without an explicit obsolete tag being set,
there is a problem there and it should be identified as an error.

Novice users will click their way through pretty much any set of
dialogs you give them, without blinking. If you present this case to a
novice user they will simply do what smart suggests.  And in the
wireless-tools case smart's suggestion is sub-optimal to doing
nothing.  There is absolutely no good reason to provide a simple UI
that encourages average users to commit package update transactions
that are trying to work around internal package conflicts inside Core
+ Updates.  These situations should NEVER happen, and we all know
that. If the end-user tools lets them happen with a simple click of
the mouse, thats a huge usability problem and its going to lead
directly to broken systems.
Flexibility needs to be tempered with robustness to errors.   Point
and click tools aimed at the average user, absolutely need to be
designed to prevent novice users from taking action based on erronous
packaging information as much as possible.


A lot of what smart does when trying to be 'smart' breaks rpm
mechanisms for constraining the dependancy space inside a
self-consistent channel.  smart's logic tries very hard to find a
'best fit' solution to a large multi-repo space but at the cost of
removing consistency checks meant to be used when a channel or a group
of channels is designed to be self-consistent.  Its one thing to be
clever and know that when you want to install a package from atrpms
you should remove a conflicting core package because atrpms and core
are not designed to be self-consistent as a pair. Its quite another to
be so clever that you forget that Core itself is self-consistent and
that Core+Updates-released is suppose to be self-consistent.

What i want is to give smart's flexibility scope based on the
understanding of how a channel is suppose to work and how a channel is
suppose to work with other channels.  installing something from livna,
as a matter of channel policy, shouldn't require the removal of a core
package.. we all know this.. its a stated policy for the livna
channel. The update of a updates-released package shouldn't require
the removal of a core package without an explicit obsolete being
set... we know this.. this is a stated policy of how updates are
suppose to work. These 'policy' definitions for the livna and the
updates-released channel should be respected by packaging tools and
should be used in the calculation of 'best' transaction to avoid
offering any transaction that we know should never be presented to a
user because it HAS to be the result of a packaging error according to
established channel policy for the channels invovled in the
transaction. We must build tools that protect users from errenous
packaging.
 
Epochs exist for a reasons... smart breaks the epoch functionality on
purpose to perform superflexible dowgrades... regardless of which
channels are being used in the transaction.
This superflexible epoch ignore shouldn't be used in transactions in a
self-consistent set of channels. There is no good reason to engage in
this level of flexibility if you only have Core and Core Updates as
active channels in the transaction set... this will lead to unexpected
breakage for novice users when package errors are introduced.

Obsolete tags exist for a reason... smart breaks the obsolete
functionality to perform superflexible package removals across
overlapping channels.  There is no good reason to remove Core packages
when updating a Core Update if there isn't an explicit obsolete being
set. This will lead to unexpected breakage for novice users when
package errors are introduced.

Its a matter of finding a way to encode each channel's understood
policy so that smart only offers transactions we are sure are not the
result of packaging errors.  The wireless-tools example is a concrete
example of an offered transaction that should be prevented based on
the expectation of how the updates channel is suppose to work. The
only reason smart offers the transaction it does... is because there
is a packaging error.  Garbage in- garbage out. This situation can be
refined if understood channel policy constraints are used  in smart's
transaction calculation. Since we know Core updates should never need
to remove a Core package without an obsoletes tag, smart should avoid
offering any transaction that would require that.

-jef




More information about the fedora-devel-list mailing list