Hi list,

I'm reluctant of following up to start yet another fruitless discussion
on bash vs. dash on this list,  if you are really interested cf at least
3 recent threads on that subject in debian-devel.

Please don't let us hijack this thread only because someone jumped
on an aside I'm already regretting in view of this OT subthread.

On Sun, Aug 02, 2009 at 18:36 -0500, Nate Bargmann wrote:
> * Siggy Brentrup <deb...@psycho.i21k.de> [2009 Aug 02 11:54 -0500]:
[ snip ]
> > > So probably still better to help speed up that process instead of forking.
> > 
> > 5 years with 2 release cycles didn't change much apart from removed
> > bashisms. ...
> > 
> > The point of my aside you kindly jumped on was while doing a fork
> > don't forget to remove bash from essential.
> 
> Please enlighten me as to why removing Bash from essential is
> important.  My understanding was that Bash was the defacto standard
> shell these days.  I understand that Dash is smaller which means it
> could be useful.  Is Dash so much smaller/faster that it offers a real
> performance advantage over Bash on smaller systems like netbooks?  Or
> is it something else?

The point is not banning bash or neglecting it's de facto standard
status, the point is enforcing system and maintainer scripts starting
with '#!/bin/sh' to be POSIXLY_CORRECT and thus portable.

Shell scripts using bash extensions to POSIX must start with
'#!/bin/bash' and packages with maintainer scripts using bash
should declare a (Pre-)?Dependency on bash.  With bash being
essential, the last requirement can't be enforced.

Now the technical differences: 

% ls -lh /bin/[bd]ash
-rwxr-xr-x 1 root root 709K 2009-03-01 10:31 /bin/bash
-rwxr-xr-x 1 root root  83K 2009-02-16 15:51 /bin/dash

% ldd /bin/[bd]ash
/bin/bash:
        linux-gate.so.1 =>  (0xb7f8f000)
        libncurses.so.5 => /lib/libncurses.so.5 (0xb7f3f000)
        libdl.so.2 => /lib/i686/cmov/libdl.so.2 (0xb7f3b000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7ddb000)
        /lib/ld-linux.so.2 (0xb7f90000)
/bin/dash:
        linux-gate.so.1 =>  (0xb7fcf000)
        libc.so.6 => /lib/i686/cmov/libc.so.6 (0xb7e52000)
        /lib/ld-linux.so.2 (0xb7fd0000)

There is also a noticeable difference in performance, but with current
machines it sums up to the boot sequence being <10s slower when
/bin/sh -> bash compared to /bin/sh -> dash.  With slow machines
like my beloved SGI Indy R5000 the difference is more important:
iirc >1m (measured in '04).  

Apart from the boot sequence a lot of shell scripts are run in
succession when upgrading a system.  Same performance penalty here,
it's only relevant on slow boxes.

Back in '04 you had to point /bin/sh -> bash to be sure no maintainer
script broke on upgrade, implying the performance penalty.  Manoj and
others assured me on d-d, that this is no longer necessary.
  
The biggest problem in making bash non-essential are all those scripts
users wrote relying on bash always being available.  Once you make
/bin/sh -> dash the default as Ubuntu does, you can hear a great
moaning all over the world: "Debian broke my system!".

IMHO it was a fault to make bash essential in the early days of Debian
which nobody saw - with dash not yet available and shell functionality
required.

Hoping this lengthy discourse answers your questions
  Siggy
-- 
Please don't Cc: me when replying, I might not see either copy.
               bsb-at-psycho-dot-informationsanarchistik-dot-de
               or:                bsb-at-psycho-dot-i21k-dot-de
O< ascii ribbon campaign - stop html mail - www.asciiribbon.org

Attachment: signature.asc
Description: Digital signature

Reply via email to