Star (and Google) Gazing


I love the classics.  And this week has been replete with allusions to the past.  As everyone knows, I’ve fiddled with Google technology for a very long time. Indeed, I remember when the first posts about Google hit Slashdot.  That was when Yahoo! had the pre-eminent navigation technology. And web navigation was menu-based, not search based.  But I prattle on… as usual.  I also remember when I was given an opportunity to invest in the Google IPO.  [And hindsight confirms that I can be extraordinarily short-sighted.] And with all of this Google background / engagement, it’s taken me a whole lot of time to come to the conclusion that Google has a very expansive strategy – or they are exquisitely fortunate.
So what leads me to think they have a strategy?  Here’s the short list:

  • They have a fantastic base. From that base, they are the center for web navigation.  As that center, they can skim their advertising taxes.  Indeed, they are to the Internet what broadcast TV was in the latter-half of last century.  Specifically, they are the launch point for content.
  • They recognize that the browser is the current (and near-term) means to leverage their launch pad.  Consequently, they are offering a branded browser.  Do I like Chrome? Yes, I really do.  Is it still a bit buggy and problematic?  Yes, indeed it is.  For example, I still have trouble using the ‘out-of-the-box” Chrome with the WordPress hosting site.  In fact, I have to use Firefox as there are still scripting issues with the current Chrome dev branch (and WordPress). But Chrome is my default browser on most of my platforms – the only exception being my default workstation in the office.  And yes, I work for a company that requires IE.
  • Google has some hella-good “cloud” apps.  This includes GMail, Google Docs, GTalk, Google Maps, Google Latitude, Google Earth and even Picasa. Many of these apps are my primary apps in specific app categories. And the Google app strategy seems to be squarely targeted to network-based apps.  As I am always switching from machine to machine, I really need storage on the network.  Right now, this includes email, bookmarks, preferences and the like.  But in the future, it WILL include a whole lot more.  And this isn’t just for personal use.  More and more of our corporate apps are “stateless” and require network connectivity.
  • Google has also laid down a marker in the enterprise collaboration space. Google Wave extends the promise that new collaboration technologies will eventually transform current email systems.  Is Wave there yet? It sure isn’t.  But it shows obvious promise.    I think of it this way: Lotus Agenda showed glimmers of what became Lotus Notes.  In the right hands, Google Wave will evolve into something truly spectacular.  Of course, it really does need someone with vision – and technical chops.
  • Google has also taken a few bold steps into the development market.  Are they building an IDE? Not yet.  But they are aligning themselves with Eclipse.  And they are investing immense amounts of money in both Javascript and in the development of a whole new language: GO.
  • Google has leveraged their expertise in Linux in order to build embedded systems expertise.  I have used Linux for years – since the mid-nineties to be precise.  And desktop Linux has always eluded critical mass.  Is it cool?  Sure.  Is it going to replace the current desktop paradigm? Probably not.   But Google’s approach has been to change the paradigm (and move apps off the PC).  So they’ve used their platform expertise to build new platforms.  To this end, they realized the success of the iPhone and knew that it was not just a hand-held phone story but also a development platform story.  So Android was born.  Is Android a game-changer? Not yet. Will it become a game-changer? Most definitely.  And the Verizon Droid may just be the match that lights the conflagration.
  • While Google has recognized that their browser is important, they’ve realized that the browser must also run on a platform that runs other applications.  Hence, the Chrome team has focused on “native client” technology.  I’ve written about native client before.  But as I consider Android (and Chrome OS), I realize just how important native client will become.  It is important for the purpose of performance.  But it also holds immense promise for running those pesky apps that aren’t network-based.  Indeed, native client (combined with the right virtualization engine) may hold the key to unlocking the Microsoft shackles that constrain most of us.
  • And this week, Google demoed what many think will be a coup de gras: Google Chrome OS.

Is Chrome OS going to dethrone Microsoft Windows? Not any time soon.  Is Chrome OS going to take market share from Apple’s Mac OS X? Again, I wouldn’t expect that to happen any time soon.  But could it attack both by changing the battlefield?  It absolutely could.
But what will it take for Google to accelerate these changes? Wow, that is a huge question.  I think that they need the following:

  1. Google has a great strategic vision. But from the outside, it looks as if they lack someone who has the chops (and cred) to execute on the vision. This will mean some additions (or changes) to the senior leadership at Google.  Someone must be given a couple of years to build the tactical plan from the strategic plan.
  2. Google needs some platform partners.  By this, I mean that they need a Hewlett Packard (or some other company) to provide home-based “server” products that can wean households off the Microsoft desktop teat.  This won’t be desktop Linux.  It will be household servers that stores files, streams applications, automates systems, stores and streams media, etc.  Do the components exist? Yes, they do.  But they need a tactical vision to place the household server into new houses.  That way, everyone in the house can use a netbook (or other untethered device).  [Note: I think that Google is showing that they can effectively manage such partnerships.  For evidence, look at the Android strategy.  They are doing exactly what Apple is not: Google is building a cooperative eco-sphere that features their carrier partners.  Again, they are doing what Microsoft couldn’t do (or wouldn’t do) with Windows Mobile.]
  3. Google needs to double-down on their investment with developers, developers, developers.  Microsoft earned the allegiance of a generation because they blatantly pandered to developers.  And many developers have rewarded them with unflagging fealty.  Google needs to do the same thing.  But in this case, they need to invest in Eclipse.  And they need to carry through on the promise of new languages.  I would hate to still be coding C/C++ (or worse, Java or C#) in a decade.
  4. Google needs to either develop (or sponsor) a number of emerging virtualization platforms.  I would have preferred to see VirtualBox in Google’s hands.  But Google needs to sponsor free and open virtualization platforms.  Even Microsoft realizes just how much VMWare has changed the game in data centers.  And Google has so much more to offer in this space.  Indeed, I would love to see some of their data center management technologies emerge into the mainstream.  Think Loudcloud/Opsware meets Amazon AWS.
  5. Finally, Google needs the time for all of the elements to cook.  Strategic visions like this take years to gestate and mature.  And Google needs to remember that they can’t get it all at once. But unlike Microsoft, their core business is NOT dependent upon a single iteration of the technology wheel. Google is a marketing and advertising company.  As long as they keep that core engine going for a few more years, they will have a good shot at allowing new technologies to thrive as they grow within the nest.

So am I like the early astrologers? Am I trying to see patterns and visions in the visible stars?  Do I see Ursa Major and not realize how far apart these stars are from one another?  That’s certainly possible.  I may be seeing non-existent patters.  But from my perspective, I really do see an emerging Google leviathan.
Just as we moved from the IBM mainframe vision to the Microsoft PC vision, are we finally seeing the market leader emerge on the long-anticipated move from the Microsoft PC vision to the Google service vision?
-Roo

Going Native (Client) – For Today

Mandelbrot NaCl in Chrome
Mandelbrot NaCl in Chrome

It’s been a while since I’ve taken the time to actually post anything substantial on this site.  I have been swamped at work.  And I have focused more of my personal time on family matters and on micro-blogging.  And today was going to be no exception to that rule.
I got up first thing this morning.  My intentions were to spend time on yard work and to enjoy time away from the computer.  After two months of heads-down work, I wanted the break.
But I decided that I would spend a few minutes on Google Reader.  That was my first mistake.  It didn’t take long for me to notice lots of kerfuffle about Google Chrome and built-in support for Native Client.  I remembered the Native Client buzz from Google I/O but I hadn’t really dug into the subject.  That changed this morning.
Native Client was a Google Code initiative that has developed into something far more transformative.  Stated simply, Native Client is a way that web applications can access/run native instructions on an x86 system.
That’s nothing new, per se.  Indeed, the idea of interpreting code to make it portable has been around for a long time.  When I built my first computer (a Heathkit H89 system), I decided to run UCSD’s Pascal p-system as an OS.  For those too young to know what I’m talking about, this was a PC operating system that ran completely on interpreted pseudo-code (i.e., interpreted byte-code).  Since then, the more obvious examples of this are Java and .Net applications.
And Google is now building their own instance of portable code.  I think this is all preparatory for Chrome OS and the cloud-based services that they are soon to unleash upon the computing world.  But that is a subject for a different post.  Today’s post is about getting started in Native Client.
So after sharing a few articles in Google Reader and tweeting a little bit about it, I decided to launch down the path of understanding it by installing the new platform.  But that was easier said than done.  Now that I am done, it doesn’t seem all that hard.  But it took me quite a few fits and starts.
Before launching into the list of tasks, let me note that I did all of this work on my Windows 7 system.  So I spent a lot of time figuring out which issues were part of the Native Client experience and which were part of the Windows 7 experience.  But I’ve been through the tunnel and it isn’t nearly as hard as it seemed while stumbling in the dark.
Here’s what I did: [I’ll update this post with links after I finish my dinner.]

  • I downloaded the latest version of Chrome (4.0.220.1).  Actually, this happened automatically.
  • I enabled the browser to run the Native Client. [You must add a run-time option to your Chrome invocation.  In my case, I used the following:  chrome.exe –enable-nacl
  • I downloaded the Getting Started guide and I realized that there was far more to Native Client than just the browser additions.  Indeed, I needed to download and install the Native Client interpreter.
  • Before I could launch into that installation, I needed to install Python.  I hadn’t installed that onto the Windows 7 system yet.  So off I went to http://www.python.org.
  • Of course, Python wasn’t enough.  I had to also install the PyWin extensions.
  • Once I had Python installed, I ran the installation and configuration steps in the Getting Started document.  Of course, things failed.  At first, I saw errors indicating that Visual Studio was not properly installed.  Huh?  So I had to actually go into the installation scripts.  Once there, it was obvious what the problem was: I didn’t have a working C compiler or development environment on this system.
  • The next step took way too much time.  I had to decide which C compiler I should install.  I don’t have a licese for VS 2008 at home.  So I had to decide whether to use Cygwin, MinGW or gcw.  I had read that there were problems with Cygwin so I tried gcw.  No joy.  I then tried MinGW.  Also, less joy than anticipated.  Since I had great success with Cygwin on other systems, I decided to try it after all.  Well, I had no troubles at all installing and using Cygwin with Native Client.  [Note: The only problem with Cygwin was apparently a problem with the zip functionality in Cygwin.  I avoided this and had no issues whatsoever.]
  • Now that I had a compiler and a scripting engine, I could actually run the installer as delivered from Google.  Lo and behold, things began to work. But I still needed to have a local web server for testing.  Since I didn’t want to use any of my other web servers lying around the bat cave, I decided to try the hpptd instance that comes with the Native Client code itself.  [BTW, I still don’t know if I like a Python-based web server, but it works fine.  So why not.]
  • I ran the Mandelbrot and Life examples from the command line.  And they worked flawlessly.  So it was time to move on to the browser tests.
  • I tried the samples in Chrome and ended up getting 404 errors thrown by the web server.  I was not feeling happy.  But I wanted to get this done.  So I pushed ahead and installed the Firefox extension.  And once I used the Firefox extension that ships with Native Client, everything worked.  All the sample apps worked like a charm.  At some point (probably tomorrow) I’ll try to get Chrome to use the Native Client environment.  But that is for tomorrow.

Now that I can sit down and think about what I’ve done, I realize that this is still a developer preview.  But the only reason that it is in such a state is because no one has packaged everything up properly.  The code works.  And it has immense promise.  It just needs someone to put a pretty wrapper around it.
And that person won’t be me – at least, not tonight.
-Roo
*Update: The solution to the Chrome issue was simple.  I mispelled the execution parm.  Once corrected, Native Client goodness is available within my Chrome browser.  w00t!
**Update: Curious…Native Client works with an invalid parameter (–enable-nacl) but doesn’t work with the valid one (–internal-nacl).  And it also works w/o any parameter.  I wonder if Chrome is using the NPAPI plugin.