Relatively complex problem space; the below list of problems are depending on each other, so it does not make sense to split them into separate issues. The resolution needs to take all of them into account.
- A field schema is set in stone after initial creation and cannot be updated.
- Field type modules have to be able to programmatically update their field schema.
- As with any other module, the field schema of field type modules will change over time. Currently, Field API tries to prevent any schema updates on the assumption that the schema update has been triggered via Field UI. While limiting the possibilities of the user interface makes sense to some extent, there must be a way for field type modules to perform intended, safe, and wanted field schema updates, just like any other module has to be able to update its schema. Field type modules are no exception to that rule.
AFAICS, Field UI already implements the necessary logic to prevent users from updating a field schema through the UI. The current patch does not change the runtime API of field_update_field(), so it still disallows field schema changes. Instead, an update helper function is introduced, which basically is the same as field_update_field(), but works within the update.php environment and does not disallow schema changes.
EDIT: Splitted the other issues with field_update_field() into
FAILED: [[SimpleTest]]: [MySQL] 27,343 pass(es), 0 fail(s), and 1 exception(es).
FAILED: [[SimpleTest]]: [MySQL] 26,138 pass(es), 1 fail(s), and 1 exception(es).
PASSED: [[SimpleTest]]: [MySQL] 26,165 pass(es).
PASSED: [[SimpleTest]]: [MySQL] 26,154 pass(es).