In practice the arbitrary sizing of basic C integer types (int, long, etc.) has proven to be extremely error prone. Basically it's virtually impossible to use them correctly (except in small examples). You don't get any portability benefits because it's too difficult to write code that is
actually portable across word sizes, and you get extra bugs when things don't behave like you expect. There's basically no upside.
It's much less error prone to use fixed size types, especially since approximately all computers are now 32 or 64 bit.
I once lost hours on an Arduino project exactly because of this. I was using the SD card library, and there was an infinite loop bug. Turned out to be because most Arduinos (at the time) are 16 bit, but I was using a 32 bit one. The code had been written using `int` but also assumed that int was 16 bits!
The code was less portable because of the "portable" int sizing system. It didn't work at all with other sizes, whereas if it had been written using uint16_t it would have worked fine.
You can say "well they made a mistake", but remember we're talking about MISRA. Avoiding mistakes is the whole point.