From owner-freebsd-arch@FreeBSD.ORG Mon Nov 14 21:45:06 2011 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6C6E91065673; Mon, 14 Nov 2011 21:45:06 +0000 (UTC) (envelope-from yanegomi@gmail.com) Received: from mail-dy0-f54.google.com (mail-dy0-f54.google.com [209.85.220.54]) by mx1.freebsd.org (Postfix) with ESMTP id B1A528FC0C; Mon, 14 Nov 2011 21:45:04 +0000 (UTC) Received: by dyk29 with SMTP id 29so353678dyk.13 for ; Mon, 14 Nov 2011 13:45:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; bh=5iARt8c4w+85j4ynQiOCO+C506MYE0hcPhBiLVo6Nn4=; b=hljhuF6CPjDuRrGmr5KAwUbFEvuZIZo+yvMTCWMd6iRabDnMJIYoCkI8Gp6nc/RAd4 O6KzdvdNO9ISKRai1MMei3ZxxF/ONddD2w1/fsnHkgdvQHPLArJp+3j+gsMQ9gveaZW5 kok8YYMqlFn1jT+3as01EkjK3Q1Cqb10QLDVI= MIME-Version: 1.0 Received: by 10.182.12.66 with SMTP id w2mr2357539obb.7.1321307103286; Mon, 14 Nov 2011 13:45:03 -0800 (PST) Received: by 10.182.7.34 with HTTP; Mon, 14 Nov 2011 13:45:03 -0800 (PST) In-Reply-To: <20111114193434.GC2164@hoeg.nl> References: <201111140101.pAE11XEa067064@mail.karels.net> <201111140802.13355.jhb@freebsd.org> <20111114193434.GC2164@hoeg.nl> Date: Mon, 14 Nov 2011 13:45:03 -0800 Message-ID: From: Garrett Cooper To: Ed Schouten Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Cc: Tim Kientzle , Doug Barton , mike@karels.net, arch@freebsd.org, Robert Watson , freebsd-arch@freebsd.org Subject: Re: The strangeness called `sbin' X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 14 Nov 2011 21:45:06 -0000 On Mon, Nov 14, 2011 at 11:34 AM, Ed Schouten wrote: > Hello Robert, others, > > Before I get to the subject, please excuse me for not commenting on all > your emails individually. I am afraid that if I would do that, the > discussion will fragment. > > The first thing I noticed is that some of the emails mention that the > work I proposed was a solution searching for a problem. I have to > emphasize this is clearly not my intention. It was something that I > started to notice when I was working on the utmpx code in 2009, where > half of the utilities were stored in /usr/bin, while the others were > placed in /usr/sbin. The reason why I let it wait until now, is because > even though I was considering moving the tools around back then, I > realized that this causes major headaches for our users, because if they > don't run `make delete-old' (which isn't even described in the handbook, > by the way), they'll end up having two copies. I reasoned that > performing a merge of sbin to bin automatically fixes this. Combined > with the arguments that I gave in my opening email, I am under the > impression that this is something that we should consider. > > The reason why I brought it up last week, is because I got reminded of > the issue by seeing the Fedora discussion. So to summarize: the reason > why I proposed this, is _not_ because the Fedora folks think it's cool, > it's because work in this area was (is?) on my TODO list anyway. The > fact that the Fedora folks are also discussing this, was only a > confirmation for me that this is a point of discussion in a larger part > of UNIX-land -- not just FreeBSD. > > Now let me respond to Robert's email specifically, as it raises an > interesting point, which I already thought about, but had not > specifically mentioned in the introduction email. > > From now on, let us assume we're discussing the patchset I have sent to > the list initially -- not the discussion between Doug and I, where we > discussed a full merge into /bin and /lib. > > * Robert Watson , 20111114 18:48: >> Ditto. =A0I agree with Ed that it is more aesthetically pleasing and in >> keeping with the actual design principles we have, but it would be >> quite disruptive for downstream users. =A0Especially if the source tree >> is rearranged, since not all revision control systems (or import >> methods) take kindly to large-scale renaming of subtrees with >> substantial patches. =A0 > > So let us divide our users in two groups; regular users and vendors. > > Group 1: regular users > ---------------------- > In my opinion the patch isn't really disruptive for our end users. One > of the things that I don't want to do, is perform the merge of the > sbin and games directories automatically. This is because one small > error or assumption in our scripts can render many the system > unbootable. If it turns out we don't have anything to worry about, we > could eventually automate this through some means. If committed to SVN > in its current form, users will experience the following upgrade > procedure: > > - csup or svn up the source tree > - The user compiles the source, installs the kernel, reboots, etc. > - The user runs `make installworld', but it will simply print a message, > =A0asking the user to read /usr/src/UPDATING, which contains four simple > =A0shell commands that perform the merge. > - When done, the user runs `make installworld', which will now continue > =A0to work properly. > > So all in all this is a pretty simple procedure. The total overhead is > only four small shell commands on a single `make installworld'. Compared > to the /usr/X11R6 -> /usr/local migration, it should be trivial, to say > the least. > > Group 2: vendors > ---------------- > So a pretty serious point that Robert raises, is that changes to source > tree layout are really irritating for our vendors. Now keep in mind that > I have mentioned nothing in particular about source tree layout. Even > though it would be a lot more consistent if those directories are merged > as well, I have not been promoting this. > > We could easily put the following policy in place: any new (or massively > rewritten?) utilities installed in /bin or /usr/bin _must_ be placed in > src/bin/ and src/usr.bin/. The src/sbin/ and src/usr.sbin/ directories > are left the way they are. In other words: the directory src/usr.sbin/ > can be described as "applications that were historically installed in > /usr/sbin". > > So vendors shouldn't notice that much of the transition. They can just > build on top of our source tree the way they currently do. The only > merge conflicts they could experience, are lines of code where we > replace path names, but conflicts in that area are as likely as any > other changeset. > > I think this message covers most of the things I wanted to say for now. > I really hope we can continue this discussion in a fruitful manner. I > have noticed that even though there has been criticism, there have also > been many people that have expressed support for this work, both > privately and on the mailing list, so it would be nice if this > discussion actually leads to something useful. > > Just because certain aspects have so far not been worked out completely, > doesn't mean the idea as a whole is a bad thing. And if it turns out to > be a bad thing, then so be it. At least it has served as a lesson. Maybe > it's worth asking yourself this question: "say, we were to merge sbin > with bin, what kind of problems can we walk into and how should they be > resolved?" Having written a few shell scripts and debugging others' -- I can speak from experience and say that there are folks who do one of the following: 1. Hardcode paths to utilities (/usr/sbin/sysctl comes to mind). Maybe for optimization; maybe to avoid alias'ing, etc. 2. Use which / command -p / etc to divine where their binaries come from. 3. Hardcode PATH to a restricted path to ensure determinism. 4. Just dash it all and call commands without any predivined path. 5. People might have come up with tricky ways of determining real files from symlinks in their scripts or other programs in order to 'divine' their existence. 6. People have come up with interesting path overlaying; this is especially true in larger companies where there's 15+ years of development history, e.g. my previous employer. The difference between one binary and another is the difference between your application working and not working. Please be careful because I'm sure your changes are going to break items 1., 2., 5. and 6., which is going to break a lot of 3rd party scripts, binaries (vendor code like the mergepoint BMC update utilities), ports, and packages in inexplicable ways. Anyhow, back to your regularly scheduled bikeshed. Thanks, -Garrett