The kernel does not have just one system call to rename a file; instead,
there are three of them: rename(),
renameat(), and renameat2(). Each was added when the
previous one proved unable to support a new feature. A similar story has
played out with a number of system calls: a feature is needed that doesn’t
fit into the existing interfaces, so a new one is created — again. At the
2020 Linux Plumbers Conference,
Christian Brauner and Aleksa Sarai ran a pair of sessions focused on the
creation of future-proof system calls that can be extended when the need
for new features arises.
Source: LWN.net – [$] Conventions for extensible system calls