1) Ok, use ServiceProviderFinder sounds better, so I commited the necessary changes.
2) Well, in theory in the classpath there will not be multiple SPI implementations, because the idea is each server container provide its own implementations (note LifecycleProvider is an exception to this rule). Pick the first one is the same as commons-discovery does. About the ordering problem, we can't do too much, because it is a problem related to SPI itself. But anyway, we always provide two ways to override a SPI provider. For example, if someone wants to override AnnotationProvider it can create a custom one under this key:
or he/she can override the factory to define a custom ordering or something else:
But maybe we should log an informative message indicating there are two possible SPI providers, instead prevent initialize myfaces.