An open source JavaScript framework, Famo.us tries to simplify the building of complex UIs via Web development so that developers don't have to rely on native development. Aimed at mobile and Web applications, it features a 3D layout engine with a 3D, physics-based animation engine.
To explore what this new technology means for developers, InfoWorld Editor at Large Paul Krill recently talked with Famo.us CEO Steve Newcomb, who founded Famo.us with Mark Lu, about the project.
InfoWorld: What's all the fuss about Famo.us?
Newcomb: We really cut our teeth in the HTML5 space, just like everybody else, trying to build apps and interfaces that were super-beautiful, super-performing, doing things that native can do. We went into it just like everybody else with all these hopes. We learned by experience that it's rough.
It always felt like that beautiful interface that you're going for was just out of reach. Like you'd get a demo working and then it would work on an iPhone but it wouldn't work on an Android, or you'd get it to work on a phone but it wouldn't work on a tablet. Somewhere along the line it would always fall apart. HTML5 wasn't quite reaching [its] promise.
We tried to use CSS3 and regular HTML5 for a year and a half to reach that goal, and we finally came to the conclusion that it wasn't possible. We decided to take a scientific approach to it and see if there's a root problem we might solve. One of the things that we knew was that JavaScript over the past three years has gotten a lot faster. We knew one thing going into our study is that JavaScript could do matrix math about 80 percent as efficient as compiled C. And matrix math is the bits that you use to render a screen. We know that JavaScript comes with no install, no plug-in. It's on every browser. [We wondered] if we could use JavaScript as a tool to fix the original sin within the browser, whatever that original sin was.
We took a deep dive, and the first thing we figured out is the layout rendering engine inside the browser was a big problem. It was designed to render a text document with links. Imagine that's the foundation of the building, then we built everything on top of that. Asking it to render an app or a game -- no wonder it's having trouble. You have a "wrong tool for the job" problem.
The second problem we found out is CSS3 is the animation engine you get in a browser. We realized that CSS3 is a pretty rudimentary animation engine. We looked and said, "Why can't there be a 3D physics engine in there like modern console games have?" [We asked] if we can use JavaScript and write our own layout engine and our own 3D physics engine and attach it in the chain in a very elegant way so that we circumvent the browser, but do it in a way that isn't some hack. Then we noticed the W3C approved a key attribute called Matrix3d. With Matrix3d, if you are capable of creating your own matrices and multiplying them and arriving in a composite matrix on your own (such as doing your own layout), you can pass it right through that one attribute. It's an API to the GPU. So now we have a W3C-approved, really good interface surface area onto the GPU.