Grains are not supposed to share state directly and are expected to only use message passing. But the runtime, being just a .NET library, cannot enforce this rule. So it's merely a convention, which is trivial to violate if necessary. For example, for sharing an immutable piece of state within a silo.
Thanks for the clear reply. I also read your paper. Immutable should be adequate for avoiding the serialization tax in hybrid applications that need 'symmetry breaking' of location transparency.