5 ms·
GNU has flip-flopped on it. - Based on the NEWS file, it sounds like pre-v2.0 (1993) versions had totally separate implementations for each program and didn't
by LukeShu 4y ago
GNU has flip-flopped on it.
- Based on the NEWS file, it sounds like pre-v2.0 (1993) versions had totally separate implementations for each program and didn't have -E, -F, or -G flags (but only history back to 1998 has been imported to Git, and I don't feel like digging up old tarballs to verify)
- In the first revision checked in to Git (1998), it's argv[0]-inspecting, but the program is compiled identically 3 times, rather than being hardlinked or symlinked. https://git.savannah.gnu.org/cgit/grep.git/commit/?id=06b9f7e683e7650804cadd9a4c5cf6bff6c89625 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=06b9f7...
- In v2.2c (1998) it changed to be 3 separate binaries https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f7620959fee786f7b8edde63bd61d6a3e56daec4 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f76209...
- In v2.5 (2002) it changed to be argv[0]-inspecting hardlinks https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f620c907368af50cc920699897bd88878591d011 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=f620c9...
- In v2.5.1 (2002) it changed to be shell scripts https://git.savannah.gnu.org/cgit/grep.git/commit/?id=5cb71b0d603501ec10bcc3df3261bd8a760cda84 https://git.savannah.gnu.org/cgit/grep.git/commit/?id=5cb71b... <---- (this is a spicy commit message)
- In v2.5.2 (2005) it changed to be 3 separate binaries (the `fgrep` binary being a lot smaller than the `grep` binary) https://git.savannah.gnu.org/cgit/grep.git/commit/?id=d25bebd35aae9c5ed0e1d62eb211ff16586e759f https://git.savannah.gnu.org/cgit/grep.git/commit/?id=d25beb...
- In v2.19 (2014) it changed back to shell scripts https://git.savannah.gnu.org/cgit/grep.git/commit/?id=b639643840ef506594b6c46e5b24d9980a33e78e https://git.savannah.gnu.org/cgit/grep.git/commit/?id=b63964...
- lolc 4y agoThanks for the lineup! Seems quite the waste that this would change every five years. So removing seems a good option. I didn't like the arg0 magic, so I'm happy that is gone. Funny to think I had to be in the right time window to even notice that.
- chasil 4y agoWhat is your objection to argv[0]? Gzip and its successors have used this technique for decades, and busybox wouldn't exist without it. On Android, take a look at /system/bin, to find this approach still very much used.
- lolc 4y agoHm, I just dislike magic like that. It tends to go wrong in weird ways. If I'd compile it and symlink to it as fgrep-gnu for example. But of course, the wrappers would be even more confusing, executing the system grep, not the compiled grep. So removing the wrappers is fine.
- somat 4y agoAfter A bit of thought it does not bother me. But I can see why it could bother people, the idea that a function changes based on it's name is weird, after all the name is just a symbolic identifier, it should not matter if the name is "search" or "grep" it should do the same thing. But I decided it does not matter, mainly because names are really important, so important that changing the name effectively changes the function, for example if you took the sin() and renamed it destroy_universe() there would be so much uncertainty about both the new name and the lack of the old, that it does not matter that the code is the same, you have to now treat them different, so having code that does different things based on the name is fine.
- chasil 4y agoAndroid uses toybox, because the license is more permissive. https://landley.net/toybox/about.html https://landley.net/toybox/about.html Here is the output from my phone (notice the applets for egrep and fgrep): 127|:/ $ toybox [ acpi base64 basename blkdiscard blkid blockdev cal cat chattr chcon chgrp chmod chown chroot chrt cksum clear cmp comm cp cpio cut date dd devmem df diff dirname dmesg dos2unix du echo egrep env expand expr fallocate false fgrep file find flock fmt free freeramdisk fsfreeze fsync getconf getenforce getfattr getopt grep groups gunzip gzip head help hostname hwclock i2cdetect i2cdump i2cget i2cset iconv id ifconfig inotifyd insmod install ionice iorenice iotop kill killall ln load_policy log logname losetup ls lsattr lsmod lsof lspci lsusb makedevs md5sum microcom mkdir mkfifo mknod mkswap mktemp modinfo modprobe more mount mountpoint mv nbd-client nc netcat netstat nice nl nohup nproc nsenter od partprobe paste patch pgrep pidof ping ping6 pivot_root pkill pmap printenv printf prlimit ps pwd pwdx readelf readlink realpath renice restorecon rev rfkill rm rmdir rmmod rtcwake runcon sed sendevent seq setenforce setfattr setsid sha1sum sha224sum sha256sum sha384sum sha512sum sleep sort split stat strings stty swapoff swapon sync sysctl tac tail tar taskset tee test time timeout top touch tr traceroute traceroute6 true truncate tty tunctl ulimit umount uname uniq unix2dos unlink unshare uptime usleep uudecode uuencode uuidgen vconfig vi vmstat watch wc which whoami xargs xxd yes zcat