Application container design
Some opinionated advice:

I don't see why having two separate class, so I merge Kernel into App and rename it "AppKernel". 


Then, I removed the "ready" method to replace it by the "create" from Kernel.
You don't need the "getType" function since your classes already define a "type"
I don't really understand why you want to keep a reference to your application's instances, so I remove it.
For me you should load the configuration from the outside with a dedicated "configuration" object.


EDIT: I added a method to create "singleton" application, I think this method will work but I am not 100% sure, so try it before.

All this transformation lead to something like this: 

&lt;?php
namespace App;

interface Executable
{
    public function run();
    public function ready();
}

class Configuration
{
    public static function load() {
        return [
            'key' =&gt; 'value'
        ];
    }
}

abstract class AppKernel implements Executable
{
    /**
     * Application name
     * @var string
     */
    protected $name = '';
    private static $instances = [];
    /**
     * Application configuration
     * @var array
     */
    protected $config = [];

    protected function __construct($name, Configuration $config)
    {
        $this-&gt;name = $name;
        $this-&gt;config = $config;
    }

    public static function create($name, Configuration $config)
    {
        if(!isset(static::$instance[$name]))
           static::$instance[$name] = new static($name, $config);

        return static::$instance[$name];
    }

    public function run()
    {

    }
}

class WebApplication extends AppKernel {}

class ConsoleApplication extends AppKernel {}

ConsoleApplication::create('name', configuration::load())-&gt;run();