Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roadmap #886

Closed
wants to merge 8 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 94 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
@@ -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).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

s/more /most / – I might drop single as well, since most implies singularity.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good call, updating.


io.js does not remove JavaScript API.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would clarify this a bit. By JS API, do you mean "EcmaScript" API or node core API?

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are two points to consider here. I believe the intent is that "io.js does not remove JavaScript API from core". Beyond that, there's the interesting challenge that might occur dealing with volatile changes in V8 such as the broken Promises and Classes that shipped at one point.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dshaw, fortunately that is really unlikely to happen again due to how stable releases of io.js will also track stable versions of V8, which is a guarantee io.js will never "unship" shipped V8 features.


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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo on maintinence.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Possibly crosslink term Long Term Supported to the section below.


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`

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

v8 should be written as V8 instead.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd crosslink nan with the github repo.

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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here you starting switching to code-ifying io.js instead 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 maintinence to ensure continued long term support in `io.js` patch releases.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typo on maintinence.


## Channels

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It might be worthwhile to include a one to two sentence definition of what a channel is in this context.

* 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)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section needs more explaining in general I think. E.g., what kind of experiments will NG be used for; how will you install it; when will changes from it make it into release; when can we start expecting NG builds. Many of those answers will probably be "I don't know" but I think it'd be nice to say that to make clear the whole NG thing is kind of fuzzy right now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The things you're actually for explanations about are still up for debate :)

The main point here is that:

  • we are going to have a future version of the platform
  • it won't break the existing ecosystem
  • there is a place for you to contribute to that effort
  • this work will not interfere with block or be blocked by the ongoing releases that are shipping improvements to the existing platform.


> This is not Python 3!

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would remove this reference :P you never know haha.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1 on removing


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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NG using in the old CommonJS -> NG using the old CommonJS

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

compatiblity -> compatibility


# 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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd replace -- by .

* 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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you share any reference on this? I'd like to learn about it.


## 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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a link to an issue or repo representing this work for those who would like to get involved?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not yet, but I'll add one once there is :)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rad, I'd love to get in on this. I've built a few silly little tools for CFG/AST analysis and it'd be great to put 'em to use :)


## 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.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd switch the creation and usage word order.

* Implement WHATWG Streams interface and identify compatibility issues.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We might say "explore compatibility with WHATWG Streams", we may never implement WHATWG streams exactly. May also be worth linking "WHATWG Streams" to the github repo.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, someone should implement a reverse compatible version of WHATWG streams but that shouldn't necessarily be readable-stream. I'll modify to the language here.

* Improve stream performance.

## Localization

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sugg: ## Internationalization / Localization. More area for those quick ⌘+F :)


* Build documentation tooling with localization support built in.
* Reduce size of ICU and ship with it by default.
* Continue growth of our i18n community.