Die Punkte 1 und 2 sind z.B. Delphi zwar auch "unberechenbar", aber es steht definitiv fest, daß alle Units, welche im Interface eingebunden werden
immer vor der Initialization initialisiert werden.
Nur bei Units, welche erst in der Implementation eingebunden werden, ist diesbezüglich keine Garantie festgelegt.
Da Lazarus/FPC angeblich eine "Nachmache" von Delphi ist und dieses Verhalten schon immer so sein dürfte, sollte sich FPC doch auch daran halten?
Ansonsten würde ich dieses als gravierenden Fehler einstufen.
Also ich hoffe mal der Fehler liegt bei Punkt 3, denn auch in Lazarus dürfte ShowMessage ein
VCL-Formular kapseln
und die
VCL wird über Application.Initialize erst richtig initialisiert.