Skip to content

Instantly share code, notes, and snippets.

@Qantas94Heavy
Last active October 29, 2016 11:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Qantas94Heavy/e2c7d7922c6ab75e4d34b8a6cc952b17 to your computer and use it in GitHub Desktop.
Save Qantas94Heavy/e2c7d7922c6ab75e4d34b8a6cc952b17 to your computer and use it in GitHub Desktop.
Node.js static libraries in openSUSE

Node.js static libraries in openSUSE

By (upstream) default, all of the following are built as static libraries:

  • c-ares
  • http-parser
  • ICU (International Components for Unicode)
  • libuv
  • OpenSSL
  • V8
  • v8_inspector
  • zlib

In openSUSE at the moment, these are already built as shared libraries (all others as static):

  • OpenSSL: only on Leap 42.2+ and Tumbleweed (Node.js is not compatible with OpenSSL 1.0.1)
  • zlib: all versions

In openSUSE at the moment, these are a list of system libraries Node.js should link to, but currently are not linked:

  • c-ares (not 4.x): Tumbleweed only
  • http-parser: Tumbleweed only
  • ICU: all versions
  • libuv: no versions

Below is a description of the libraries that are currently built statically and problems (if any) in using system libraries.


c-ares

Node.js versions:

  • 4.x LTS: fork (based on 1.10.0)
  • 6.x LTS: 1.11.0 + patch for CVE-2016-5180
  • 7.x: 1.11.0 + patch for CVE-2016-5180

openSUSE versions (libcares2):

  • 13.2: 1.10.0
  • Leap 42.1: 1.9.1
  • Leap 42.2: 1.9.1
  • Tumbleweed: 1.11.0

Seems to avoid API/ABI breaking changes where possible -- as far as I am aware, the last API/ABI breaking change was in 2007 (1.5.0).

It would be possible to use the system c-ares on Node.js 6.x and later if it was updated to latest upstream 1.12.0 (which includes a fix for CVE-2016-5180), or 1.11.0 with a specific patch for that vulnerability.

It is not possible at the moment to do so on Node.js 4.x, however it might be possible to patch Node.js to fix this.

http-parser

Node.js versions:

  • 4.x LTS: 2.7.0
  • 6.x LTS: 2.7.0
  • 7.x: 2.7.0

openSUSE versions (libhttp-parser-suse0):

  • 13.2: N/A
  • Leap 42.1: N/A
  • Leap 42.2: 2.6.2
  • Tumbleweed: 2.7.1

It is unclear what is upstream's policy about API/ABI compatibility -- API/ABI was last broken during an update from 2.6.0 to 2.6.1 (Feb 2016). Since then however, there has been a pull request (after the last ABI break) that states that any ABI breaking changes would require a major version update.

I have opened an issue to request clarification on this matter.

ICU

Node.js versions:

  • 4.x LTS: 56.1
  • 6.x LTS: 57.1
  • 7.x: 57.1 (likely update to 58.1)

openSUSE versions (icu):

  • 13.2: 53.1
  • Leap 42.1: 52.1
  • Leap 42.2: 52.1
  • Tumbleweed: 57.1

API/ABI compatibility only provided for APIs listed as stable. (reference)

It seems that Node.js will build/run successfully even when linked against older versions of ICU, though this may give some different results in specific cirumstances where i18n data has been updated.

libuv

Node.js versions:

  • 4.x LTS: 1.9.1
  • 6.x LTS: 1.9.1
  • 7.x: 1.9.1

openSUSE versions (libuv1):

  • 13.2: N/A
  • Leap 42.1: N/A
  • Leap 42.2: 1.6.1
  • Tumbleweed: 1.8.0

libuv's API follows Semantic Versioning, while ABI is meant to be stable across major versions. (reference)

If libuv was updated, it would be possible to use the system library copy of libuv.

V8

Node.js versions:

  • 4.x LTS: fork (based on 4.5.103.33)
  • 6.x LTS: fork (based on 5.1.281.75)
  • 7.x: fork (based on 5.4.500.36)

openSUSE versions (v8):

  • 13.2: N/A
  • Leap 42.1: N/A
  • Leap 42.2: 5.3.171
  • Tumbleweed: 5.3.171

Node.js maintains its own fork of older V8 versions to maintain compatibility, given that upstream (Chromium) frequently introduces breaking changes. This includes floating backport patches and other compatibility changes.

Using a bundled version of V8 is not supported by Node.js and would most likely fail to compile/run.

v8_inspector

Not included in openSUSE and no support in the ./configure script for this to be unbundled. It is highly unlikely that any bundled version would be supported, given its relation to V8 and its current experimental status.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment