Contributing to Node Core

JaxNode March 2018

Why would you want to contribute to an OSS project? 

Node.js OSS History

  • Started by Ryan Dahl in 2009
  • Sponsored by Joyent
  • Community forked IO.js in 2014
  • IO.js and Node merged back in 2015
  • Initially had 2 committees, CSC & TSC
  • Both committees merged into one, TSC
  • There has been some Drama

James M Snell

Node TSC and Core contributor

Poor experience with first commit

Node OSS Stats

  • 133 Repos
  • 283 Users Commit access
  • 1927 Users contributed
  • Over 21,000 commits

Ways to contribute

  • File a an Issue
  • Unit Tests
  • Documentation
  • Modules
  • Node Core
  • Blog/medium Posts
  • User Group Presentation

Node Core

  • github.com/nodejs/node
  • Combination of C++ and JS
  • Mostly JS
  • V8 default engine
  • LIBUV used to manage async and event loop

JS Engines

  • Node.js was built on top of V8
  • Sometimes Node would break with new V8 releases
  • As of last year, V8 can no longer break Node
  • V8 added new interpreter and compiler toolchain
  • Igniter and TurboFan
  • Node can also use Chakra Core
  • V8 and Chakra Core both conform to a Node Interface

Look at Source and Build

  • git clone https://github.com/nodejs/node.git
  • Need GCC or LLVM compatible
  • ./configure
  • make -j4

Folder Structure

  • /benchmark
  • /deps
  • /doc
  • /lib
  • /source
  • /test
  • /tools

Important folders

  • /doc => Documentation on nodejs.org/api
  • /lib => JS Code
  • /src => C++ code
  • /test => Unit tests

Node.js does not have a strategic roadmap

Module Development

  • Node made up of Core Modules
  • Move to remove some modules from Core
  • Most modules actually come from NPM
  • HTTP/2 recently added to Core
  • Express has been modified to work with HTTP/2
  • Almost all NPM modules Open Source

Where find work to be done

  • Github issues
  • API Documentation
  • Node Todo website

Donate Hardware

Where is Help Needed

  • APIs need promises
  • async await
  • ES6 Modules
  • Async-Hook
  • Workers (think Web Workers)
  • Static Error Codes
  • Better i18n
  • Improved Native Modules (N-API)

How Do I Submit Changes

  • Fork the Github Repo
  • Read the CONTRIBUTING.md and CODE_OF_CONDUCT.md docs
  • Test
  • Make a pull request
  • Code Review and changes

Typical Linux Kernel Commit

Because if you want me to "act professional", I can tell you that I'm not interested. I'm sitting in my home office wearing a bathrobe. The same way I'm not going to start wearing ties, I'm *also* not going to buy into the fake politeness, the lying, the office politics and backstabbing, the passive aggressiveness, and the buzzwords. Because THAT is what "acting professionally" results in: people resort to all kinds of really nasty things because they are forced to act out their normal urges in unnatural ways.

- Linus Torvalds

Node Reviewers Nicer

  • They should be helpful
  • Use the Style Guide
  • Be Professional
  • css-tricks.com/code-review-etiquette/

Nodejs.org

  • Node.js website also on Github
  • If you speak foreign language, could use internalization help 
  • Built using Metalsmith

Working Groups

  • Node.js WGs have their own Repo
  • Usually have scheduled meetings over Google+
  • WG include committees on subjects such as Benchmarking, Testing, Diversity, Express and Security
  • Many more...

Node.js Collection

  • Online Node.js Magazine
  • Full disclosure, I am an editor
  • Runs on Medium
  • Submit your post to Node.js Collection

Other Notable OSS Projects

  • React and React Native
  • Angular.js
  • Babel
  • .NET Core
  • Swift Language
  • Ruby On Rails
  • Jaxnode.com
  • Pick a NPM Package
  • Create Your Own

Questions?

Contact Me

  • David Fekke
  • David Fekke at gmail dot com
  • Skype: davidfekke
  • Twitter @jaxnode

nodecore

By David Fekke

nodecore

Slides from the March 2018 presentation on contributing to Node.

  • 1,133