Is IM the “Last Desktop App Standing”?

•02Mar07 • 2 Comments

Om Malik and others have reported on Jive CEO David Hersh’s speech at Etel, where he claimed that IM applications will never migrate off the desktop.

I’m a little mystified by the argument, at least as presented by Om (I haven’t seen an actual transcript or slides for the actual talk):

  1. Real Time with IM:
    Real time communication and collaboration are great, no doubt about it. But who says you need to be in a desktop application to achieve those things? Is there some special magic in XMPP, SIP, and Jabber protocols that makes them unimplementable in a VM environment? Of course not, and here is the proof: Adobe Acrobat Connect lets you chat, do VOIP, and more all within a web browser, using Flash. Jive’s own products implement these protocols in Java, which was also a VM environment last time I checked.
  2. And then there is the familiar user interface!:
    Again, Flash-based user interfaces are incredibly rich. AJAX-based experiences have come a long way as well. What exactly is the special sauce in desktop IM programs that makes their UI unamenable to the RIA experience? As Om himself points out earlier in his article, if you can do Buzzword or Adobe Remix that way, surely the IM experience can be handled in the same manner…
  3. Future full of features:
    Again, what is it about IM as a desktop application that makes it more amenable to new features than an RIA implementation or an AJAX one? Many people think that RIA environments are more productive places to program than the old Win32/Apple worlds. They certainly aren’t less productive.
  4. Mobile goes the IM:a
    This is a non-sequitir. How mobile IM clients are written will have little or no effect on whether desktop IM applications survive. Besides, mobile platforms could offer IM services based on Flash Lite or J2ME.

I suspect that David Hersh’s argument may actually be a lot simpler than presented by Om. He may just be saying that IM applications won’t ever be predominantly browser-based. But if that is what he’s saying, then my answer is: so what? If the future of IM is as an Apollo app, a Widget/Gadget, or some other such technology, why does it matter how those applications get onto the desktop? They are still going to be built on Web technologies, not on traditional “desktop” APIs.

Jens Alfke on Patents vs. Copyrights

•02Mar07 • Comments Off on Jens Alfke on Patents vs. Copyrights

Apple’s own Jens Alfke has written a great piece on patent law as compared to copyright law. As a bonus, it also makes fun of Mary Bono. Highly recommended.

[Update 03-02-2007] I had to fix the URL in the post. Somehow Textile preview in TextMate did the right thing with the curly quotes, but the Textile engine used by our version of MovableType did not. Jens – curly quotes in URLs – seriously? Plus, I misspelled Mary Bono’s name.

Why Adobe is NOT the Next Microsoft

•02Mar07 • 9 Comments

Ted Leung has posted blog entry provocatively titled : Adobe wants to be the Microsoft of the Web and Scoble has picked up on it.

In Ted’s post, he worries about the issues around Flash being sourced from a single vendor:

What is not appealing is going back to a technology which is single sourced and controlled by a single vendor. If web applications liberated us from the domination of a single company on the desktop, why would we be eager to be dominated by a different company on the web? Yet, this is what Adobe would have us do, as would the many who are (understandably, along some dimensions, anyway) excited about Flex? Read Anne Zelenka’s post on Open Flash if you don’t think that Flash has an openness problem. I’m not eager to go from being beholden to Microsoft to being beholden to Adobe.

Despite the title of his post, this isn’t an unreasonable worry. Its unfortunate the title is so sensationalistic1, though, because Adobe will never be the next Microsoft, and furthermore, we don’t want to be. There is a huge difference between Microsoft’s business model, which is about using the web to drive sales of their underlying monopoly products, and Adobe’s strategy, which is to give away technology that expands the web and sell tools around that technology. If you don’t believe me when I tell you this is a huge difference, I suggest you take look at the revenue numbers for both companies yourself.

I think a big part of the fear of Adobe being a single source vendor comes from thinking about Flash Player the way people think about Windows: if Flash Player becomes the dominant runtime for RIAs, could Adobe hold everyone hostage by charging money for the Flash Player or doing something else equally obnoxious? The answer is, quite simply, no. Flash is an important format for the Web today, but a big part of the reason why its successful is because the Player is free (as in beer), it is installed on the vast majority of desktop computers, and it just works wherever it is installed. If Adobe held Flash Player hostage, the Web would just route around the damage by picking some other format that didn’t have the same restrictions.

Same thing goes for Apollo, only more so. Apollo isn’t just about Flash, it is also about Ajax. If Adobe tried to hold Apollo hostage in some way, developers would just move their Apollo apps back into the web browser.

So that is my logical answer to the question, now let me give you a more emotional argument: Adobe would never try to abuse the dominance of Flash Player because it simply isn’t that kind of company. I’m not saying Adobe has never made mistakes (e.g. Sklyarov), and Adobe certainly has no aversion to making money, but at its core Adobe is the most ethical company I’ve ever worked for, of any size. (Yes, I worked for both Apple and Microsoft previously – there is no comparison.) Holding the Web hostage is something that I believe is completely against Adobe’s values. I realize this leaves me open to charges of naivety, but so be it.

Update 3-03-2007: On being closed source

Michael Coté linked to this post with the comment that it was a “Reply to Ted’s post on Adobe and being a closed source vendor.” While I certainly can’t argue with that characterization, it does make we want to clarify something: when I discuss Adobe’s likely actions, I’m doing it under the assumption the status quo will stay just that: the Flash Player will remain a closed source product, and that the SWF format will continue with its existing license. But that doesn’t mean that I’m arguing for the status quo, or that the status quo can’t and won’t be changed. I know that people like John Dowdell (who are much more involved in Flash Player efforts than I am) have been thinking long and hard about the way forward for Flash Player and Apollo, and have asked many questions publicly about the benefits and costs of opening things up more. Thus I think its fair to say that change is quite possible. I personally would welcome steps in this direction but don’t really have much involvement with that part of Adobe.

1 Then again, who am I to criticize other people’s sensationalistic titles?

Apple’s Take on Application Programming Environments?

•16Feb07 • 6 Comments

This is a followup to yesterday’s post on Application Programming Environments. As I thought more about what I wrote, it brought to the forefront some stuff I’ve been wondering about in this area. Specifically, does Apple have a comprehensive strategy/philosophy/outlook on the issue of native code vs. JIT code, or on Objective-C vs. dynamic languages? If so, could someone please explain it to me (and no, I’m not being facetious – I really want to know).

But First, A Mini-rant on Objective C

I don’t like Objective C. Never have. There. I said it. Flame away!

Why don’t I like it? First, let me say what I do like: I think the runtime is amazing in the way it combines dynamic behavior with native speed. I think Cocoa is fantastic. Toll-free bridging is brilliant. But all this discussion of bridging between native languages like C and Objective C and dynamic languages like Ruby and Python has really crystalized for me what I dislike about Objective C: the constant need to do a cognitive shift back and forth between dynamic Smalltalk goodness and static C minutiae. Here’s an example of what I’m talking about, courtesy of Wil Shipley:


- (id)_realItemForOpaqueItem:(id)findOpaqueItem outlineRowIndex:(int *)outlineRowIndex
    items:(NSArray *)items;
{
  unsigned int itemIndex;
  for (itemIndex = 0;
       itemIndex < [items count] && *outlineRowIndex < [self numberOfRows];
       itemIndex++, (*outlineRowIndex)++) {
    id realItem = [items objectAtIndex:itemIndex];
    id opaqueItem = [self itemAtRow:*outlineRowIndex];
    if (opaqueItem == findOpaqueItem)
      return realItem;
    if ([self isItemExpanded:opaqueItem]) {
      realItem = [self _realItemForOpaqueItem:findOpaqueItem outlineRowIndex:outlineRowIndex
          items:[realItem valueForKeyPath:[[self _treeController] childrenKeyPath]]];
      if (realItem)
        return realItem;
    }
  }
}

This mix of id and C-style pointer dereferencing just sets my teeth on edge, and after years of using “scripting” languages I’m not super-fond of all those square brackets either. The equivalent code in Ruby would be both more readable and more succinct. I am, of course, aware that this is a subjective aesthetic judgement. If you don’t mind this style of programming, I’m happy for you. But for me it was enough to keep me out of the Cocoa/Mac OS X programming universe – kinda ironic since I once worked in MacDTS and knew more about Mac internals than most folks.

Apple’s Investments in JITs and Dynamic Languages

So despite my inability to overcome my aversion to Objective C, I still try to keep up with all things Mac OS X. It is clear that Apple has a strong commitment to Objective C. They’re making lots of improvements in Objective C 2.0. But they’re also making some interesting technology investments around JITs, dynamic languages, and so forth:

  • Core Image has a nifty JIT compiler that takes a GLSL code and dynamically compiles it for the target GPU or CPU. Cool.

  • OpenGL in Leopard uses LLVM to dynamically recompile graphics code on the fly for systems that don’t do hardware vertex shading. This code replaces a previously existing JIT compiler (who knew!).

  • Apple is doing LLVM work targeting the ARM processor. Is this for the iPhone or something else? Beats me. But using LLVM would allow Apple to build a higher level Java-style VM on top of it but targeting Objective C, or it would let Apple dynamically recompile programs for new processors (kinda like Rosetta on steroids) and architectures: no more fat binaries. Or it could be something else entirely.

  • Apple is shipping Java with OS X but doesn’t really put a lot of investment into it. They killed the Cocoa-Java bridge. Can’t say I miss it.

  • They ship Python, Ruby, and Perl with Mac OS X. New bridge technology makes these quite usable with Cocoa, which is cool, but it isn’t clear whether or not these bridge technologies will be included with Leopard or not.

On the other hand, you have the current situation with fat binaries: PowerPC, x86, x64, and maybe even ARM binaries. This is obviously not a scalable solution when you start talking about optimizing for many different configurations of CPU cores, GPUs, etc.

Microsoft’s Strategy

By comparison, Microsoft’s strategy is obscenely simple: .NET everywhere, and dynamic languages are welcome to come along for the ride. IronPython, JRuby, etc. are all supported on .NET. LINQ adds more dynamic behavior to C# and VB.Net. .Net Compact is part of the Windows Mobile story. WPFE will someday have a miniCLR that runs on Macs and maybe elsewhere. Microsoft has buried the hatchet with Novell (unfortunately they seem to have buried the hatchet in the back of the Linux community, but that’s another topic), so the Mono team no longer needs to worry about patent litigation from Microsoft. Heck, they even want Apple to support Cocoa#.

A Plea to the Lazyweb

What I want to know is this: exactly where does Apple see the future of JIT compilers and dynamic languages? Will Apple maintain a slavish devotion to natively compiled Objective C, or do they plan to start moving more and more to dynamic language development as so many others are doing? I’d love to hear what someone from Apple has to say, of course, but welcome contributions from other industry watchers.

One Last Tangent

As an update to my earlier piece, see this interview with Mark Hamburg about the use of Lua in Lightroom:

So what we do with Lua is essentially all of the application logic from running the UI to managing what we actually do in the database. Pretty much every piece of code in the app that could be described as making decisions or implementing features is in Lua until you get down to the raw processing, which is in C++. The database engine is in C; the interface to the OS is in C++ and Objective C as appropriate to platform. But most of the actually interesting material in the app beyond the core database code (which is SQLite) and the raw processing code (which is essentially Adobe Camera Raw) is all in Lua.

[Update 02-17-2007] Corrected some editing errors and typos.]