To make it somewhat more insightful, some background info:
DCU's are more or less a combination of the following parts
- The object code, which is normal statically compiled relocatable object code, just like what C or C++ would generate.
- debug code inclusive (a Topview variant if I'm not mistaken)
- A precompiled header(interface) in some form.
- unspecialized generics in some representation (*)
- cross-unit inlinable code (tree representation?)
I don't know if all these 4 are separate sections or that they are interleaved. My guess is that 1+2 are combined (since that allows more generic routines in the linker) and there is a "rest" with 3+4+5 and maybe some other metadata.
Since headers might depend on OS specific types and symbols in system unit and OS specific units, even in theory only the most self contained units could be crossplatform. Probably not worth the effort to bother.
As far as decompilation goes, it is pretty much the same as the general decompilation problem, with a few twists:
- not yet finally linked (object) code is slightly easier decompilable
- code with attached debug code is slightly easier decompilable.
- however the DCU format is version dependent and proprietary.
- the entire decompilation process is very compiler and -version dependent.
In short, it is probably not a bit easier than earlier Delphi compilers or even a static lib + header files of a random C++ compiler.