Explicitly requiring a class that's also marked to autoload can result in that class getting loaded twice. Normally that's not a huge problem, but in cases where the class undefs methods or something else similar it's an issue.
Here's a simple example created from a real-world ActiveSupport 4.1.8 issue I hit:
JRuby 1.7 and 9k require logic looks mostly identical, so I don't think this is a bug in require. Most likely this is a bug that has always existed in how we search for loaded and loading features, and it is being exposed now because 9k is (properly, I think) expanding absolute paths at various places during load.
I started looking into MRI's logic, and it has many differences from ours.
search_required, which should be equivalent to our featureAlreadyLoaded, has a great deal more logic. It is extension-aware, and performs lower level searches for loaded features with the extension in mind.
rb_feature_p, upon which we probably based our featureAlreadyLoaded, has logic to check expanded load path entries, circular load lock ("loading" collection) and more.
MRI's feature_index appears to aggregate not just the file loaded for a feature, but other file paths that should match that feature.
I'm attempting a partial port, but I have other responsibilities that will pull me away from this.