Node.js on PowerPC

A story about porting Node.js & V8

Who cares?

I've never used PowerPC

So I probably don't care about this at all

Really? - Have you ever used..

  • Mac G4 / G5?
  • PS3? Xbox360? Wii?

IBM Cloud

V8 - a JavaScript runtime

That's part of the Chrome browser, right?

Yes, but V8 is also a stand-alone runtime

Node.js uses V8 as its JS runtime engine

Node.js primer

What's Node made of?

V8 Enginelibuvcore lib
platform abstraction layer

Node.js was created by Ryan Dahl
Joyent is the steward of Node.js

What do you do with Node.js?

A few good examples of when Node.js is a good fit

  • Single page gmail-like applications
  • Creating services with JSON API
  • Streaming data


  • Node Package Manager
    • online repository of node modules (
    • command line utility for interacting with

  • Most node applications are built using many packages

  • Example:
    $ npm install orion
    $ node node_modules/orion/server.js

Was it hard to port?

  • Node.js - No, not really.
  • V8 - Yes. Very.

    Why? V8 always compiles JS to machine code.

Can I get it? YES!

Is it open source? YES!

How is PowerPC different?

Not Intel assembly, so completely different machine instructions

PowerPC is Big Endian (actually bi-endian)

Consider 0xDEADBEEF stored in memory

Memory location little big mixed
base address + 0 EF DE AD
base address + 1 BE AD DE
base address + 2 AD BE EF
base address + 3 DE EF BE

Checking Endian

int main()
  int x = 1;

  char *y = (char*)&x;


Clearly this is a C porting problem

JS doesn't care about endian

You might. ES6 introduces TypedArrays

var a1 = new Uint32Array([1]);

var a2 = new Uint8Array(a1.buffer);



  • An ArrayBuffer type, representing a generic fixed-length binary buffer
  • A group of types are used to create views of the ArrayBuffer
  • Multiple typed array views can refer to the same ArrayBuffer, of different types, lengths, and offsets

Typed Array spec:

Demo Node.js on PowerPC

Hopefully the demo gods will allow this..


Andrew Low

twitter @andrew_low