I would guess it's down to the different line endings used by win (\r\n) and linux (just \n)
"Staircasing". However I've not seen that happen despite similarly having debug WriteLn()s called by multiple threads.
i) If in doubt, put a Flush(Output) immediately after the WriteLn.
ii) I've never had to use a critical section in that circumstance.
iii) Where are you creating that critical section?
iv) I /have/ seen peculiar effects if mixing references to Output and stdout.
v) The only time I've seen staircasing like that is if I've intentionally messed around with terminal properties using ioctl().
Are you, by any chance, using something like the Crt unit elsewhere in the program? It's generally frowned upon to post a mere fragment, for precisely that reason: people can't see what you're doing before you get to the problem.
MarkMLl