¿para qué quiero 2 tipos primitivos exactamente iguales?
Bueno, como dije antes, no son iguales en realidad, hay que tomarlos como si fueran diferentes, esto depende del compilador y de la plataforma.
Investigando un poco, el estandar solo especifica que el tipo long no sea menor a int, no hay nada que especifique que forzozamente sea mayor a int, pueden ser iguales.
Haciendo un poco de historia, y suponiendo el porque (piensa un poco en la logica de esto), en sistemas de 16 bits (me viene a la memoria Turbo C) el valor int era de 16 bis, y el long era de 32 bits. Cuando se actualizo a procesadores y sistemas de 32 bits, supongo que se tuvo que ampliar el tipo int a 32 bits, debido a que internamente el procesador usa registros de 32 bits, y es mas eficiente en terminos de velocidad utilizar 32 que 16 bits en un procesador de 32 bits, y el tipo int es el mas utilzado al definir variables que guarden valores enteros, asi que esa seria la razon, la eficiencia, ya que si como programador estas acostumbrado a declarar varlables int, es poco probable que pensaras, "bueno, estoy programando en 32 bits, ahora utilizare long, que es de 32 bits, en lugar de int que es de 16 bits, para que mi programa sea mas eficiente". La fuerza de la costumbre de utilizar int te haria ocupar el tipo int en lugar de long, aun cuando no fuera eficiente (suponiendo claro que lo hubieran dejado en 16 bits)
Quizas entonces debieron ampliar el tipo long para que fuera de 64 bits, pero igual me parece que no lo hicieron por compatibilidad con programas mas antiguos. En todo caso si necesitas un numero mas grande podrias utilizra long long, que en mi caso es de 64 bits (8 bytes).
Es probable tambien que mas adelante, cuando se vuelvan cosa comun los sistemas de 64 bits, haya un cambio parecido, y ahora el tipo int sera de 64 bits, aunque no se, creo que cualquier cosa puede suceder, eso dependera de los que definan los estandars, y tambien de los que diseñen compiladores para los nuevos sistemas
saludos