I was having lunch with a friend last week and he mentioned to me that 40% of Adobe’s new Lightroom product is written in Lua, which I had previously heard of because it’s the language used to write World of Warcraft addons. Lua is a scripting language that was designed to extend applications. It’s interesting to see it suddenly take off. Lightroom project founder Mark Hamburg explains why Adobe selected it:
Lua has an appealing balance of simplicity and power. It’s small, fast, and easy to embed. It also has a very straightforward license associated with it. It’s very much like Scheme language I like—but without a syntax likely to make people go running for the hills. So there were a lot of things.
I looked at some other things. I looked at JavaScript: Adobe had an internal implementation of JavaScript but it wasn’t as easy to do drop-ins and all the things we wanted to do in the Lightroom project. I looked at Python, I looked at Ruby. Some things were going to be bigger, slower, and had licenses that were harder to figure out. Lua just happened to fit really well.
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.
It’s a wonderful thing that big time software companies like Blizzard (creators of World of Warcraft) and Adobe adopted an existing, open source scripting language for this task rather than going with something proprietary.
World of Warcraft has been out for a couple of years now, and watching the evolution of the addon community has been interesting. It started out as a bunch of gamers just hacking out some code, but these days there are frameworks for writing addons, and projects that use IRC to coordinate, version control, wikis, and all of the other tools you’d expect to see with any active open source software development effort.
It strikes me that Lua development could soon be on the verge of taking off. (There’s a big list of applications that embed Lua here.) I’ll be interested to see if Lua is adopted further within Adobe, as well as which other applications come to be built using Lua. I think learning Lua may be one of my next projects.
I’m also interested in the larger trend of applications that are written on a compiled platform but are built mostly of scripts. Civilization IV was built in this way, but it uses Python instead of Lua for scripting. The talk these days is all about Web applications replacing desktop applications, but desktop applications can still offer many features that are just a dream when it comes to Web development. This integration of scripting platforms into desktop applications strikes me as a way to enable developers of desktop applications to harness some of the development advantages available to Web developers.
March 6, 2007 at 4:15 am
I’ve been at a couple different companies not that have embraced Lua. It’s great for a lightweight scripting language.
March 6, 2007 at 5:47 am
is lua launched by google if not NAH ! it is not the next big thing 🙂 🙂
March 7, 2007 at 2:55 am
http://d.hatena.ne.jp/zhesto/20060328/1143530796 – Lua – the silent new web 2.0 player? (from 28-Mar-2006)
March 10, 2007 at 3:28 am
Looking at the list of apps, there’s a lot of games that use it; that makes sense, since in general games are going to want the most lightweight option possible that still solves the problem.
October 2, 2007 at 2:20 pm
Don’t we all want the most lightweight option possible that still solves the problem?
Trying to figure out where that mentality wouldn’t make sense… got nuttin’
So I would think the future for Lua is bright indeed 😉