A bit over twenty years ago, Sun formed an Architecture Review Committee (ARC)
that evaluates proposals to change interfaces between components in Sun software
products. During the OpenSolaris days, we opened many of these discussions to
the community. While they’re back behind closed doors, and at a different
company now, we still continue to hold these reviews for the software from
what’s now the Sun Systems Group division of Oracle.
Recently one of these reviews was held (via e-mail discussion) to review
a proposal to update our GNU
findutils package to the latest upstream release.
One of the upstream changes discussed was the addition of an
“oldfind” program. In findutils 4.3, find was modified to use
the fts() function to walk the directory tree, and
oldfind was created to provide the old mechanism in case there were
bugs in the new implementation that users needed to workaround.
In Solaris 11 though, we still ship the find descended from SVR4 as
/usr/bin/find and the GNU find is available as either
/usr/bin/gfind or /usr/gnu/bin/find. This raised the
discussion of if we should add oldfind, and if so what should we call it.
Normally our policy is to only add the g* names for GNU commands
that conflict with an existing Solaris command – for instance, we ship
/usr/bin/emacs, not /usr/bin/gemacs. In this case however,
that seemed like it would be more confusing to have /usr/bin/oldfind
be the older version of /usr/bin/gfind not of /usr/bin/find.
Thus if we shipped it, it would make more sense to call it
/usr/bin/goldfind, which several ARC members noted read more naturally
as “gold find” than as “g old find”.
One of the concerns we often discuss in ARC is if a change is likely to be
understood by users or if it will result in more calls to support. As we hit
this part of the discussion on a Friday at the end of a long week, I couldn’t
resist putting forth a hypothetical support call for this command:
“Hello, Oracle Solaris Support, how may I help you?”
“My admin is out sick, but he sent an email that he put the findutils
package on our server, and I can run goldfind now. I tried it, but
goldfind didn’t find gold.”
“Did he get the binutils package too?”
“No he just said findutils, do we need binutils?”
“Well, gold comes in the binutils package, so goldfind would be able to
find gold if you got that package.”
“How much does Oracle charge for that package?”
“It’s free for Solaris users.”
“You mean Oracle ships packages of gold to customers for free?”
“Yes, if you get the binutils package, it includes GNU gold.”
“New gold? Is that some sort of alchemy, turning stuff into gold?”
“Not new gold, gold from the GNU project.”
“Oracle’s taking gold from the GNU project and shipping it to me?”
“Yes, if you get binutils, that package includes gold along with
the other tools from the GNU project.”
“And GNU doesn’t mind Oracle taking their gold and giving it to customers?”
“No, GNU is a non-profit whose goal is to share their software.”
“Sharing software sure, but gold? Where does a non-profit like GNU get gold anyway?”
“Oh, Google donated it to them.”
“Ah! So Oracle will give me the gold that GNU got from Google!”
“Yes, if you get the package from us.”
“How do I get the package with the gold?”
“Just run pkg install binutils and it will put it on your disk.”
“We’ve got multiple disks here - which one will it put it on?”
“The one with the system image - do you know which one that is?
“Well the note from the admin says the system is on the first disk
and the users are on the second disk.”
“Okay, so it should go on the first disk then.”
“And where will I find the gold?”
“It will be in the /usr/bin directory.”
“In the user’s bin? So thats on the second disk?”
“No, it would be on the system disk, with the other development tools,
like make, as, and what.”
“So what’s on the first disk?”
“Well if the system image is there the commands should all be there.”
“All the commands? Not just what?”
“Right, all the commands that come with the OS, like the shell, ps, and who.”
“So who’s on the first disk too?”
“Yes. Did your admin say when he’d be back?”
“No, just that he had a massive headache and was going home after I tried to get him to explain this stuff to me.”
“I can’t imagine why.”
“Oh, is why a command too?”
“No, _why was a Ruby programmer.”
“Ruby? Do you give those away with the gold too?”
“Yes, but it comes in the ruby package, not binutils.”
“Oh, I’ll have to have my admin get that package too! Thanks!”
Needless to say, we decided this might not be the best idea. Since the GNU
package hasn’t had to release a serious bug fix in the new find in the
past few years, the new GNU find seems pretty stable, and we always have the
SVR4 find to use as a fallback in Solaris, so it didn’t seem that adding
oldfind was really necessary, so we passed on including it when we
update to the new findutils release.
[Apologies to Abbott, Costello, their fans, and everyone who read this far.
The Gold (linker) page on Wikipedia may explain some of the above,
but can’t explain why goldfind is the old GNU find, but gold is the new GNU ld.]