Las extensiones de archivo ayudan a los sistemas operativos y a los usuarios a identificar un tipo de archivo particular para que sepan qué aplicación o programa usar para abrirlo.
En algunos sistemas operativos (Unix, Linux, Mac OS) la extensión de archivo es completamente opcional, mientras que en otros sistemas (OS/8, CP/M, MS-DOS, Microsoft Windows) es realmente obligatoria.

Captura de pantalla del shell de Linux
Las limitaciones históricas de los sistemas operativos antiguos, como MS-DOS y las primeras versiones de Windows, eran ocho caracteres para el nombre del archivo y tres caracteres para la extensión del archivo, separados por un punto.
Estas limitaciones fueron eliminadas con la introducción de Windows 95 y se permitieron nombres de archivo de hasta 255 caracteres. Sin embargo, la detección del tipo de archivo por su extensión siguió siendo obligatoria en Windows incluso en la última versión de Windows 10.
En los sistemas operativos basados en Unix estas limitaciones no existen y se pueden tener hasta 255 caracteres para el nombre del archivo. La extensión, que es completamente opcional, ni siquiera forma parte del nombre real del archivo.

Ejemplo de archivo command.com en MS-DOS
Hoy en día, el máximo de 255 caracteres para el nombre del archivo es el estándar de facto en todos los sistemas operativos modernos.
Esto significa que puedes tener un nombre de archivo de hasta 253 caracteres, un punto entre la extensión y una extensión de un carácter para un total de 255 caracteres. Lo contrario (aunque muy improbable) también es posible. Teóricamente podrías crear un archivo que tenga un carácter en el nombre del archivo, un punto y una extensión de 253 caracteres.
También puedes tener tantos puntos como quieras como parte del nombre del archivo, porque los sistemas que requieren un separador de extensión de archivo solo buscan el último para determinar el sufijo real del nombre del archivo.