I wish HTML could be the future of app development but there are a number of reasons it's not there and unfortunately won't be anytime soon.
- HTML is always one step behind native. While HTML can continue to play catch-up with new features it'll always be a step behind when it comes to new technology. Features like push notification, NFC, calendar, microphone, accelerometer, OpenGL, contact/calendar access and even basic things like the camera on the device are just not there on the web. The folks that develop the browser itself are building a native app so the native app API's have to come first. Even though it seems like HTML is "close" it'll continue to be close as it's a moving target.
- Platform consistency. The phone is personal, more personal then a PC. The user interface on each mobile device is also personal. An iPhone app interface isn't the same as Android or Windows Phone or BlackBerry. Users want platform consistent experiences. This is something that you just can't do on the web.
- Discovery and distribution model: The web is a collection of "pages" that connect to one-another but conceptually these pages don't always form a product. The app-store is a model that works because you have a centralized place for complete products, not pages. These products are rated, ranked and categorized. In addition to a distribution model native apps have a monetization model that doesn't exist on the web.
To understand the problems we're facing today with native vs. HTML we need to roll back the clock back to 1994. This was my first memory of HTML. I had just taken an intro computer class on basic networking and data structures. We learned about the efficiencies in how packets get sent and recomposed between computers and we also learned how to efficiently pack bits into a data-structure for optimal efficiency. Native C & C++ type stuff.
Even back then I felt there was something wrong. At the core levels of efficiency of both data storage and network traffic it felt like there were problems. Where were the data-structures? To create something as simple as a link wasted 16 bytes <a href=""></a>. No big deal? What's 16 bytes anyway? 12 bytes too many.
Yes, it's a little extra data. But it's not just storage of the data but it's encoding the data, sending it over the network and parsing it for display. The inefficiency isn't on the one tag. It's on every single tag. Same problem for network requests. Instead of opening a connection to a server and getting all images and data in one shot you would open a separate connections for each image.