What's the difference between Kernel.require and Kernel.gem_original_require?

Hi,

Consider the following script:

module Kernel
  unless defined?(gem_original_require_2)
    alias gem_original_require_2 require
    private :gem_original_require_2
  end

  def require(path)
      return gem_original_require_2(path)
  end
end

p method(:require) # #<Method: main.require>
p method(:require).owner # Kernel
p method(:require).receiver # main
p method(:require).source_location # ["1.rb", 7]

puts '-' * 10
p Kernel.method(:require) # #<Method: Kernel.require>
p Kernel.method(:require).owner # #<Class:Kernel>
p Kernel.method(:require).receiver # Kernel
p Kernel.method(:require).source_location # nil

puts '-' * 10
p Kernel.method(:gem_original_require) # #<Method:
Kernel.gem_original_require(require)>
p Kernel.method(:gem_original_require).owner # Kernel
p Kernel.method(:gem_original_require).receiver # Kernel
p Kernel.method(:gem_original_require).source_location # nil

puts '-' * 10
p Kernel.method(:gem_original_require_2) # #<Method:
Kernel.gem_original_require_2(require)>
p Kernel.method(:gem_original_require_2).owner # Kernel
p Kernel.method(:gem_original_require_2).receiver # Kernel
p Kernel.method(:gem_original_require_2).source_location #
["/home/yuri/.rubies/ruby-2.6.3/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb",
34]

Do you know why Kernel is sometimes a class, sometimes a module? Why
do they have different receivers? Does receiver become self when
method gets called?

But more importantly, are Kernel.require and
Kernel.gem_original_require the same method? Is there any other place
where Kernel.require gets overridden? Thanks in advance.

Regards,
Yuri