gnu coreutils tail implementation exits if the output of tail is piped to another command and that other command exits.
coreutils tail -f file | filter
this functionality was added in coreutils 8.28 and a few bugs relating to it were fixed in 8.31.
uutils/coreutils tail does not exit when the piped command exits