The doc says functional mode (=:results value=) is the default for most Babel libraries [1]. I haven't looked at many, but it is the default for ob-python and ob-shell. Scripting mode (=:results output=) is the default for ob-C, and the old ob-java (neither of these provided a functional mode). When I added functional mode to ob-java, I made it the default since that seemed correct. But that change breaks anyone that relied on the old default (the workaround is to add a =:results output= header). I will change the default in the short term to unbreak the experience, but what, if anything, should be done long term? And is this inconsistent behavior across languages something that should be fixed? or is it intentional or at least not worth doing anything about? [1] https://orgmode.org/manual/Results-of-Evaluation.html#Results-of-Evaluation