From 773b002814273f3a4a3fa778c641c5c47edbd7c0 Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Wed, 18 Feb 2015 17:17:18 -0800 Subject: [PATCH 1/8] Initial roadmap commit. --- ROADMAP.md | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 ROADMAP.md diff --git a/ROADMAP.md b/ROADMAP.md new file mode 100644 index 00000000000000..0a2491971471bb --- /dev/null +++ b/ROADMAP.md @@ -0,0 +1,94 @@ +# io.js Roadmap + +***This is a living document, it describes our policy and priorities as they exist today but can evolve over time.*** + +## Stability Policy + +The single more important consideration in every code change is the impact it will have, positive or negative, on the ecosystem (modules and applications). + +io.js does not remove JavaScript API. + +Shipping with current and well supported dependencies is the best way to ensure long term stability of the platform. When those dependencies are no longer maintained io.js will take on their continued maintinence as part of our Long Term Support policy. + +io.js will continue to adopt new v8 releases. +* When v8 ships a breaking change to their C++ API that can be handled by `nan` +the *minor* version of io.js will be increased. +* When v8 ships a breaking change to their C++ API that can NOT be handled by `nan` +the *major* version of io.js will be increased. +* When new features in the JavaScript language are introduced by v8 the +*minor* version number will be increased. TC39 has stated clearly that no +backwards incompatible changes will be made to the language so it is +appropriate to increase the minor rather than major. + +No new API will be added in *patch* releases. + +Any API addition will cause an increase in the *minor* version. + +### Long Term Support + +`io.js` supports old versions for as long as community members are fixing bugs in them. + +As long as there is a community back porting bug fixes we will push patch releases for those versions of `io.js`. + +When old versions of dependencies like v8 are no longer supported by their project `io.js` will take on the responsibility of maintinence to ensure continued long term support in `io.js` patch releases. + +## Channels + +* Release - Stable production ready builds. Unique version numbers following semver. +* Canary - Nightly builds on next-generation v8 + changes landing to io.js. No version designation. +* NG - "Next Generation." No version designation. + +## NG (Next Generation) + +> This is not Python 3! + +In order for `io.js` to stay competitive we need to work on the next generation of the platform that can more accurately integrate and reflect the advancements in the language and the ecosystem. + +While this constitutes a great leap forward for the platform we will be making this leap without breaking backwards compatibility with the existing ecosystem of modules. + +NG will use ES6 modules and will be implementing a new platform and standard library available only to modules using this native new style. Modules written prior to NG using in the old CommonJS module syntax will continue to operate against the old API. This is what will allow us to make improvements to the platform without breaking compatiblity and still letting future NG based applications benefit from all the modules built today. + +# Immediate Priorities + +## Debugging and Tracing + +Debugging is one of the first things from everyone's mouth, both developer and enterprise, when describing trouble they've had with node.js/io.js. + +The goal of io.js' effort is to build a healthy debugging and tracing ecosystem and not to try and build any "silver bullet" features for core (like the domains debacle). + +The [Tracing WG](https://github.com/iojs/tracing-wg) is driving this effort: + +* AsyncWrap improvements -- basically just iterations based on feedback from people using it. +* async-listener -- userland module that will dogfood AsyncWrap as well as provide many often requested debugging features. +* Tracing + * Add tracing support for more platforms (LTTng, etc). + * [Unify the Tracing endpoint](https://github.com/iojs/io.js/issues/729). + * New Chrome Debugger -- Google is working on a version of Chrome's debugger that is without Chrome and can be used with io.js. + +## Ecosystem Automation + +In order to maintain a good release cadence without harming compatibility we must do a better job of understanding exactly what impact a particular change or release will have on the ecosystem. This requires new automation. + +The initial goals for this automation are relatively simple but will create a baseline toolchain we can continue to improve upon. + +* Produce a list of modules that no longer build between two release versions. +* Produce a list of modules that use a particular core API. +* Produce detailed code coverage data for the tests in core. + +## Improve Installation and Upgrades + +* Host and maintain registry endpoints (Homebrew, apt, etc). +* Document installation and upgrade procedures with an emphasis on using nvm or nave for development and our registry endpoints for traditional package managers and production. + +## Streams + +* Fix all existing compatibility issues. +* Simplify stream usage and creation to avoid user error. +* Implement WHATWG Streams interface and identify compatibility issues. +* Improve stream performance. + +## Localization + +* Build documentation tooling with localization support built in. +* Reduce size of ICU and ship with it by default. +* Continue growth of our i18n community. From b67282fb5ba105cf91556072a80e5a7466e1bd8f Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Thu, 19 Feb 2015 07:44:42 -0800 Subject: [PATCH 2/8] Various edits based on feedback. --- ROADMAP.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 0a2491971471bb..1295476e26774f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,21 +1,21 @@ # io.js Roadmap -***This is a living document, it describes our policy and priorities as they exist today but can evolve over time.*** +***This is a living document, it describes the policy and priorities as they exist today but can evolve over time.*** ## Stability Policy The single more important consideration in every code change is the impact it will have, positive or negative, on the ecosystem (modules and applications). -io.js does not remove JavaScript API. +io.js does not remove stdlib JS API. -Shipping with current and well supported dependencies is the best way to ensure long term stability of the platform. When those dependencies are no longer maintained io.js will take on their continued maintinence as part of our Long Term Support policy. +Shipping with current and well supported dependencies is the best way to ensure long term stability of the platform. When those dependencies are no longer maintained io.js will take on their continued maintenance as part of our [Long Term Support policy](#long-term-support). -io.js will continue to adopt new v8 releases. -* When v8 ships a breaking change to their C++ API that can be handled by `nan` +io.js will continue to adopt new V8 releases. +* When V8 ships a breaking change to their C++ API that can be handled by [`nan`](https://github.com/rvagg/nan) the *minor* version of io.js will be increased. -* When v8 ships a breaking change to their C++ API that can NOT be handled by `nan` +* When V8 ships a breaking change to their C++ API that can NOT be handled by [`nan`](https://github.com/rvagg/nan) the *major* version of io.js will be increased. -* When new features in the JavaScript language are introduced by v8 the +* When new features in the JavaScript language are introduced by V8 the *minor* version number will be increased. TC39 has stated clearly that no backwards incompatible changes will be made to the language so it is appropriate to increase the minor rather than major. @@ -30,12 +30,12 @@ Any API addition will cause an increase in the *minor* version. As long as there is a community back porting bug fixes we will push patch releases for those versions of `io.js`. -When old versions of dependencies like v8 are no longer supported by their project `io.js` will take on the responsibility of maintinence to ensure continued long term support in `io.js` patch releases. +When old versions of dependencies like V8 are no longer supported by their project `io.js` will take on the responsibility of maintenance to ensure continued long term support in `io.js` patch releases. ## Channels * Release - Stable production ready builds. Unique version numbers following semver. -* Canary - Nightly builds on next-generation v8 + changes landing to io.js. No version designation. +* Canary - Nightly builds on next-generation V8 + changes landing to io.js. No version designation. * NG - "Next Generation." No version designation. ## NG (Next Generation) @@ -46,7 +46,7 @@ In order for `io.js` to stay competitive we need to work on the next generation While this constitutes a great leap forward for the platform we will be making this leap without breaking backwards compatibility with the existing ecosystem of modules. -NG will use ES6 modules and will be implementing a new platform and standard library available only to modules using this native new style. Modules written prior to NG using in the old CommonJS module syntax will continue to operate against the old API. This is what will allow us to make improvements to the platform without breaking compatiblity and still letting future NG based applications benefit from all the modules built today. +NG will use ES6 modules and will be implementing a new platform and standard library available only to modules using this native new style. Modules written prior to NG using the old CommonJS module syntax will continue to operate against the old API. This is what will allow us to make improvements to the platform without breaking compatibility and still letting future NG based applications benefit from all the modules built today. # Immediate Priorities @@ -58,12 +58,12 @@ The goal of io.js' effort is to build a healthy debugging and tracing ecosystem The [Tracing WG](https://github.com/iojs/tracing-wg) is driving this effort: -* AsyncWrap improvements -- basically just iterations based on feedback from people using it. -* async-listener -- userland module that will dogfood AsyncWrap as well as provide many often requested debugging features. +* AsyncWrap improvements - basically just iterations based on feedback from people using it. +* async-listener - userland module that will dogfood AsyncWrap as well as provide many often requested debugging features. * Tracing * Add tracing support for more platforms (LTTng, etc). * [Unify the Tracing endpoint](https://github.com/iojs/io.js/issues/729). - * New Chrome Debugger -- Google is working on a version of Chrome's debugger that is without Chrome and can be used with io.js. + * New Chrome Debugger - Google is working on a version of Chrome's debugger that is without Chrome and can be used with io.js. ## Ecosystem Automation @@ -83,11 +83,11 @@ The initial goals for this automation are relatively simple but will create a ba ## Streams * Fix all existing compatibility issues. -* Simplify stream usage and creation to avoid user error. +* Simplify stream creation to avoid user error. * Implement WHATWG Streams interface and identify compatibility issues. * Improve stream performance. -## Localization +## Internationalization / Localization * Build documentation tooling with localization support built in. * Reduce size of ICU and ship with it by default. From 5304e8d55c3c06d89d0c701f33485b3d18652120 Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Thu, 19 Feb 2015 13:07:32 -0800 Subject: [PATCH 3/8] Removing reference to Python 3. --- ROADMAP.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 1295476e26774f..8fd9abcc686eee 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -40,8 +40,6 @@ When old versions of dependencies like V8 are no longer supported by their proje ## NG (Next Generation) -> This is not Python 3! - In order for `io.js` to stay competitive we need to work on the next generation of the platform that can more accurately integrate and reflect the advancements in the language and the ecosystem. While this constitutes a great leap forward for the platform we will be making this leap without breaking backwards compatibility with the existing ecosystem of modules. From f1b89e92db39e51eb880c96b7bcf56b96527a12a Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Thu, 19 Feb 2015 15:10:36 -0800 Subject: [PATCH 4/8] Stop codeifing io.js --- ROADMAP.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 8fd9abcc686eee..819053cc3f4f29 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -26,11 +26,11 @@ Any API addition will cause an increase in the *minor* version. ### Long Term Support -`io.js` supports old versions for as long as community members are fixing bugs in them. +io.js supports old versions for as long as community members are fixing bugs in them. -As long as there is a community back porting bug fixes we will push patch releases for those versions of `io.js`. +As long as there is a community back porting bug fixes we will push patch releases for those versions of io.js. -When old versions of dependencies like V8 are no longer supported by their project `io.js` will take on the responsibility of maintenance to ensure continued long term support in `io.js` patch releases. +When old versions of dependencies like V8 are no longer supported by their project io.js will take on the responsibility of maintenance to ensure continued long term support in io.js patch releases. ## Channels @@ -40,7 +40,7 @@ When old versions of dependencies like V8 are no longer supported by their proje ## NG (Next Generation) -In order for `io.js` to stay competitive we need to work on the next generation of the platform that can more accurately integrate and reflect the advancements in the language and the ecosystem. +In order for io.js to stay competitive we need to work on the next generation of the platform that can more accurately integrate and reflect the advancements in the language and the ecosystem. While this constitutes a great leap forward for the platform we will be making this leap without breaking backwards compatibility with the existing ecosystem of modules. From d058d500cf96dc055c2f173344061e3aa151ca58 Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Thu, 19 Feb 2015 15:14:22 -0800 Subject: [PATCH 5/8] Clarifying Canary Channel. --- ROADMAP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index 819053cc3f4f29..de37a812b6a8e8 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -35,7 +35,7 @@ When old versions of dependencies like V8 are no longer supported by their proje ## Channels * Release - Stable production ready builds. Unique version numbers following semver. -* Canary - Nightly builds on next-generation V8 + changes landing to io.js. No version designation. +* Canary - Nightly builds w/ V8 version in Chrome Canary + changes landing to io.js. No version designation. * NG - "Next Generation." No version designation. ## NG (Next Generation) From d558cf851ebdf31e684b80390b3eb1f450f4048e Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Thu, 19 Feb 2015 15:22:25 -0800 Subject: [PATCH 6/8] We might not actually implement WHATWG streams. --- ROADMAP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index de37a812b6a8e8..2638596209a7b2 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -82,7 +82,7 @@ The initial goals for this automation are relatively simple but will create a ba * Fix all existing compatibility issues. * Simplify stream creation to avoid user error. -* Implement WHATWG Streams interface and identify compatibility issues. +* Explore and identify compatibility issues with [WHATWG Streams](https://github.com/whatwg/streams). * Improve stream performance. ## Internationalization / Localization From 2f715ee8459ef7a28b902c64738e165088147eef Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Thu, 19 Feb 2015 15:23:47 -0800 Subject: [PATCH 7/8] Much better stability language from @chrisdickinson --- ROADMAP.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ROADMAP.md b/ROADMAP.md index 2638596209a7b2..21473dffd2f2f3 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -4,7 +4,7 @@ ## Stability Policy -The single more important consideration in every code change is the impact it will have, positive or negative, on the ecosystem (modules and applications). +The most important consideration in every code change is the impact it will have, positive or negative, on the ecosystem (modules and applications). io.js does not remove stdlib JS API. From dd2441d42cef7fe300472ddf81f8b9b645b7aeb0 Mon Sep 17 00:00:00 2001 From: Mikeal Rogers Date: Fri, 20 Feb 2015 14:13:27 -0800 Subject: [PATCH 8/8] Adjusting for feedback from @chrisdickinson. --- ROADMAP.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index 21473dffd2f2f3..9e56f49564d7a6 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -34,18 +34,18 @@ When old versions of dependencies like V8 are no longer supported by their proje ## Channels +Channels are points of collaboration with the broader community and are not strictly scoped to a repository or branch. + * Release - Stable production ready builds. Unique version numbers following semver. * Canary - Nightly builds w/ V8 version in Chrome Canary + changes landing to io.js. No version designation. * NG - "Next Generation." No version designation. ## NG (Next Generation) -In order for io.js to stay competitive we need to work on the next generation of the platform that can more accurately integrate and reflect the advancements in the language and the ecosystem. +In order for io.js to stay competitive we need to work on the next generation of the platform which will more accurately integrate and reflect the advancements in the language and the ecosystem. While this constitutes a great leap forward for the platform we will be making this leap without breaking backwards compatibility with the existing ecosystem of modules. -NG will use ES6 modules and will be implementing a new platform and standard library available only to modules using this native new style. Modules written prior to NG using the old CommonJS module syntax will continue to operate against the old API. This is what will allow us to make improvements to the platform without breaking compatibility and still letting future NG based applications benefit from all the modules built today. - # Immediate Priorities ## Debugging and Tracing