The compiler uses the older-style Annotation system from Java (later versions allow parameter values without keys). In other words,
callouts=false exists only because
callouts=true exists, and both must be honored because of how the
@future annotation is written in the source code. It doesn't matter that one of those values are default, the compiler must allow both of them, because that's how the run-time works.
There's no practical purpose of writing
callouts=false, unless you really want to be explicit that there are no callouts. However, in professional code, you'd rarely, if ever, see such an explicit statement, because it is already the default value. Anyone writing
callouts=false would probably be seen by more experienced developers to be a novice, because experienced developers already know the default is false.
It should also be noted that
with sharing and
without sharing is not a Boolean value; the default is "inherit" mode, which means the current sharing state doesn't change from whatever it's current set to. This is actually a performance benefit, as there is a material cost (CPU time) to specifying
with sharing or