Hi,
The main reason is that marshaling is a part of standard library, i.e., the stdlib.cma, where Unix.file_descr is a part of the unix library, and the Unix library is not included into the Standard library, thus the latter cannot depend on the former. So, the only way to introduce such functionality would be to add Unix.dump_value : file_descr -> 'a -> unit`, i.e., to the Unix module. It is doable, and I saw such function in third-party libraries and implemented it myself. There is a small issue with the buffering, as all file_descr operations are unbuffered and it is assumed that the do not create any intermediate storages. But the only way to implement the dump_value function is to use an intermediate buffer, that kind of contradicts the general spirit of the file_descr interface.
Regards,
Ivan Gotovchits