[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: POSIX shell; bash ash pdksh & /bin/sh



Santiago Vila said:
> The role of the essential flag is not to avoid breaking promises, it is to
> avoid the user to break their system, leaving it in an unrecoverable
> state. The "Priority: required" is a better way to say "such and such is
> likely to be in the system". For example, do you think it is "safe" for
> third-party software to assume that a Linux system has m4 installed?
> I think so, but this does not mean m4 has to be essential, because I can
> dpkg -i m4.deb very easily if I ever remove it by mistake (i.e. without
> realizing that I could have third-party software which needs it). For
> packages which belong to the system and that we package, the Depends:
> field on packages that depend on m4 do already ensure that I will not
> break the system if I try to remove it.

I beg to differ.  If that is indeed the case, then the policy manual 
needs to be updated to reflect that.

The Policy Manual version 2.4.1.2 refers to the "Essential" flag a 
number of times:
  Section 2.3.4 (Dependencies) states that "It is not necessary for 
    other packages to declare any dependencies they have on other
    packages which are marked `Essential'"
  Section 2.3.6 (Base packages) states that many base packages will 
    be tagged essential.
  Section 2.3.7 is all about essential packages, but I wish to discuss
    this section separately below.
  Section 3.3.4 (Scripts) states that scripts must declare dependencies
    on the shell they use, unless that shell is flagged Essential.  It
    also -specifically- gives bash as an example of such a shell.
  
So all reference to essential packages (except for possibly sec.2.3.7) 
only refer to the fact that other packages don't have to depend on them.

Section 2.3.7 is interesting in what it -doesn't- say:

2.3.7. Essential packages
-------------------------

     Some packages are tagged `essential'. (They have `Essential: yes' 
in
     their package control record.) This flag is used for packages that 
are
     *essential* for a system.

     Since these packages can not easily be removed (you'll have to 
specify
     an extra *force option* to dpkg) this flag should only be used 
where
     absolutely necessary. A shared library package should not be tagged
     *essential*--the dependencies will prevent its premature removal, 
and
     we need to be able to remove it when it has been superseded.

     You must not tag any packages `essential' before this has been
     discussed on the `debian-devel' mailing and a consensus about doing
     that has been reached.

Please note that it doesn't define what is meant by "essential".  In 
essence, it uses a circular definition to define the use of the flag.

Operationally, all that I can see the policy manual saying about 
essential packages is:

  1) essential packages may be the target of undeclared dependencies.
  2) thus, essential packages are very hard to delete.
  3) because they are so hard to delete, shared libraries must
     not be essential, since that would make replacing them too
     hard.
  4) because of these semantics, discuss it first on debian-devel.

Conversely, "required" packages have a much more concrete defintion:

2.2. Priorities
---------------

      ...
     `required'
          `required' packages are necessary for the proper functioning 
of
          the system. You must not remove these packages or your system 
may
          become totally broken and you may probably not even be able to
          use dpkg to put things back. Systems with only the `required'
          packages are probably unusable, but they do have enough
          functionality to allow the sysadmin to boot and install more
          software. 

Some have been saying that it was OK to remove "required" packaged, 
since they could always get it back with dpkg, but removing an 
"essential" package could really trash the system.  The definition of 
"Essential" and "required" imply that the situation is really the 
reverse.  I would almost argue that the -names- should be reversed.

So if "essential" really means more than "will always be here, so don't 
worry about dependencies", the policy manual should reflect that.

As it stands, many packages have undeclared dependencies on bash.  That 
seems to match perfectly with the semantics of an "essential" package.  
If it's working, why change it?



-- 
     Buddha Buck                      bmbuck@acsu.buffalo.edu
"Just as the strength of the Internet is chaos, so the strength of our
liberty depends upon the chaos and cacaphony of the unfettered speech
the First Amendment protects."  -- A.L.A. v. U.S. Dept. of Justice


--  
To UNSUBSCRIBE, email to debian-devel-request@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org


Reply to: