In reply to mark k..

@weston, Yes I saw it, and it is a hack that should not be in core. get_option is defined to get data from the option table, if it doesn't, it makes the code harder to read. Tools that have expectations about the actual data structure in the DB will fail.

More hidden failures will obviously be performance related, as the change is "transparent" code wise, plugin and theme developers will not know that those APIs might be more expensive to use, and will have no reason to fix bad code. (how many queries will be required to do is_active_widget?).

When speaking about backward compatibility there is a lot to learn from microsoft. For them backward compatibility means that you keep the bugs as well, and if you don't want them you don't claim BC.

You think the current implementation suck? I mostly agree, but the way forward is by deprecating the old code base as it has some core design problems and letting developers to opt in into the new implementation. Current APIs can be extended to support both models, and people that want to access the DB directly will get access to only part of the widgets.