What is meant by "immutable data"?

It is not possible to enforce in runtime at least until Valhalla, but it is possible to check it in compile time. For example, introduce a bytecode flag and force compiler to check that all of members have this bytecode flag. Of course, it would require to either not use Java objects, or create some kind of automatic markings the same way kotlin treats Java nullability (I can state that it would never be null, but it still could throw NullPointerException). I do not say, it should be done this way, but it is possible in theory.