The current loading mechanism (from Hadoop configuration files) would be preserved and have precedence (although it would be deprecated).
A new method getScheme() in the FileSystem class would publish the scheme handled by the implementation.
The base FileSystem class will implement this method throwing an UnsupportedOperationException.
All FileSystem implementations in Hadoop will be retrofitted to implement this method declaring their scheme and they will be registered as services.
Custom FileSystem implementations not part of Hadoop will not break if they don't implement the getScheme() method. The will continue to work as before, (they just won't support the service loading). In a future release they could be retrofitted to use the service mechanism (if their authors choose to).
Because implementations registered in the configuration have precedence over implementations registered as services, modified implementations of Hadoop provided implementations will still override the service definitions.