And for the highest degree of compatability consider sticking to the owin func<dict, task> signature as a middleware constructor, and add an extension method to IAppBuilder for discoverability.
In the following example, a Microsoft.Owin.dll reference is used only for the OwinContext/OwinRequest/OwinResponse helper classes. Those will work regardless of if the host is aware of the OwinMiddleware base class. That reference can be avoided altogether if your project has its own internal copy of an environment wrapper class it uses, instead of OwinContext.
Also in the example, an Owin.dll reference is used to add app.UseExample([options]) extension method to IAppBuilder. Without that extension method the site author could still call app.Use([options]) or app.Use(typeof(ExampleMiddleware)[, options]), but the discoverability is not good.
So, we’d suggest middleware authors take a dependency on Owin.dll to provide an IAppBuilder extension method at a minimum, and host authors to use IAppBuilder