I always think about why duplicate commands deserve to exist, but die is one of those that I know why. It may be the same as exit(), but when you want to search through source code for die() for an unhandled error vs. a clean exit(), it helps a bit on the debugging. Not to mention backward compatibility, but we deprecate those reasons for 'good' reason.