External links a symbol to a routine. public is the declaration of such symbol.
See e.g. rtl/linux/i386/syscall*; syscall.inc are the declarations of functions together with their implementation and they use:
function FpSysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; assembler; register; [public,alias:'FPC_SYSCALL3'];
This is because these functions are used in system, but not exported from system.
In other units they are used (e.g. via unit syscall), and syscallh.inc declares how they are imported:
function Do_SysCall(sysnr,param1,param2,param3:TSysParam):TSysResult; register; external name 'FPC_SYSCALL3';
(Note that do_syscall/fpsyscall are all heavily overloaded, both the original declarations in system, as their usage elsewhere. However the assembler labels must be distinct, so the number of parameters (3 in this case) is suffixed to the asm symbol)