When the DOS unit (and strangely only the DOS unit) is used both in a program and an unit used by this program, all the interface is flagged as redefined and compilation fails. This happens only with the Mingwin version, DJGPP and Linux version are OK (but they are older)
Here is a test: a programm and a unit Note that the unit DOS is not actually used.
******************************** program testinc; uses dos,unitinut; begin writeln(affichage); end.
**********************************
unit unitinut; interface var affichage:string; implementation uses dos; begin affichage:="affiche"; end. ***********************************