It's hard to get a correct policy on deprecation, especially when something
becomes popular like Node. I think Isaacs should also add "we reserve the
right to change this policy at any time in the future" to this ;-)

On Thu, Jun 28, 2012 at 9:11 PM, Joshua Holbrook <josh.holbr...@gmail.com>wrote:

> Well said.
>
> --Josh
>
> On Thu, Jun 28, 2012 at 6:01 PM, Isaac Schlueter <i...@izs.me> wrote:
> > tl;dr
> >
> > - In 0.8.1, require("sys") is not going to throw.
> > - The "warn/throw/remove" policy is being updated.
> >
> >
> > ## Backstory
> >
> > Historically, we've been very courageous in node about seeking out the
> > best APIs, even if that means breaking existing programs.  Some of you
> > may remember when a "release" was "Ryan pushed something to github",
> > and the entire shape of the API was unrecognizable from one day to the
> > next.
> >
> > As node grew up a little, that changed to "Print a deprecation warning
> > for a stable branch, and then throw in the next, and then gone in the
> > one after that."  That's served us pretty well.  A lot of features
> > were brand new in 0.4, and we didn't get them all right.  The
> > transition to 0.6 was rocky, but the freedom to change things was
> > important, even given the pain it introduced sometimes for users.
> >
> > Almost 2 years ago, we decided to rename the "sys" module to "util",
> > and to fold in the "utils" module. (There was a lot of "generic bag of
> > stuff" code floating around node's internals at that time.)  But, even
> > then, there were a lot of people using sys, and it was deemed too
> > agressive to print a warning when it was used.
> >
> > In 0.6, "sys" started printing deprecation warnings.  Following the
> > established protocol, in 0.7, we made it throw, with the idea that
> > we'd remove it in 0.9, as is Our Way.
> >
> > As people are moving to 0.8, the most common objection is that
> > require("sys") throws.  That's a bit absurd.  Following a policy
> > *can't* be more important than breaking peoples' programs.
> > https://github.com/joyent/node/issues/3577
> >
> > Node is growing up.  It's used by established companies with
> > reputations and customers and employees that have real work to do.
> > This is a necessary step in our quest for total domination of all the
> > world's programming.  Yes, it's an easy change to make.  It's also a
> > stupid one to HAVE to make.
> >
> >
> > ## New Policy
> >
> > 1. Every module in the docs has a stability index.
> > http://nodejs.org/api/documentation.html#documentation_stability_index
> >  - "experimental"  It will probably be changed.  Please use and
> > provide feedback, so we change it right.
> >  - "deprecated"  We reserve the right to remove it if it's in the way,
> > but make no promises that it will be removed, ever.
> >  - "unstable"  We reserve the right to make changes, but will consider
> > it high-cost
> >  - "stable"  We will do everything in our power to make this API
> > continue to work for the foreseeable future.
> >  - "api frozen"  The API will not be changed, even to make additions.
> >  - "frozen"  No changes to the code, unless a serious bug is found.
> > Code and API are considered "done" and unchanging.
> >
> > 2. Breaking changes, even to deprecated or unstable APIs, are
> > considered costly, and need to pay rent.  Higher-stability APIs are
> > more costly to change, but ALL api changes are considered costs.  If
> > they don't buy us anything, we don't need to do them.
> >
> >
> > ## Objections
> >
> > No one seems to actually object to sys/util itself, but there are
> > three points that were raised about Node's policies that I'd like to
> > address:
> >
> > 1. So you're saying node will never change ever again and all APIs
> > will be consistent forever?  So now Node is PHP/Windows/etc?
> >
> > Of course not.  However, from this point forward, we're going to make
> > our best effort to continue to support old programs, even if it means
> > re-implementing them in terms of new APIs.  If this actually is not
> > possible, or causes undue harm or maintenance overhead, then we'll
> > reserve the right to warn/throw/remove as we've done.
> >
> > We also reserve the right to change semantics in some cases.  There
> > was no cleaner way to fix the child process exit/close stuff but to
> > just bite the bullet and change it.  That sucked for a lot of people.
> > It breaks my heart, but we're not going to reverse on that.
> >
> > Most people are pretty understanding if something is actually better.
> > But how is spelling it "util" rather than spelling it "sys" really
> > THAT much better, so much so that you need to throw an error and make
> > my program not work?  Seems a bit like an overreaction.
> >
> >
> > 2. So if someone complains enough and is a Big App for Enterprise
> > Business, you're going to just reverse your decision?  WTF?
> >
> > Of course not.  But we will do our best not to break *anyone's*
> > programs unless we have an extremely compelling reason to do so.
> >
> > Also, we are planning on keeping master in a working state throughout
> > the development of 0.9.  If you're moving to v0.8 now, maybe also test
> > on master from time to time.  Tell us when something impacts you or
> > stops working.
> >
> > Deprecation reserves the *right* to remove something in the future, it
> > is not a contract that it definitely *will* be removed.
> >
> >
> > 3. What about the cluster "death" vs "exit" event name?  What about
> domains?
> >
> > Experimental APIs are clearly labelled in the documentation.  **They
> > will almost certainly change.**  If you would like to help inform that
> > change, please use them and let us know what parts you like, and what
> > parts are confusing or lacking.
> >
> > We are not committing to always support every API we release, forever.
> >  We are committing to considering breaking changes as a high-cost
> > activity.  Some high-cost things are worth it.  Even some superficial
> > things.  The cost of changing experimental APIs is a bit lower, since
> > we've communicated with the stability index that changes are planned.
> >
> > For example, the cluster even name should really be "exit", because
> > that's consistent with the ChildProcess and process event names.  The
> > consistency is important there, because it's actually the same sort of
> > "thing" (ie, a javascript object representing a specific operating
> > system process) and it's confusing to have different names for it.
> > Once we get some more feedback about 0.8's cluster, we will probably
> > move it to "Unstable" or even "Stable" in a future release, at which
> > point, you WILL have the assurance that programs using it will not be
> > broken unless absolutely necessary.
> >
> > --
> > Job Board: http://jobs.nodejs.org/
> > Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> > You received this message because you are subscribed to the Google
> > Groups "nodejs" group.
> > To post to this group, send email to nodejs@googlegroups.com
> > To unsubscribe from this group, send email to
> > nodejs+unsubscr...@googlegroups.com
> > For more options, visit this group at
> > http://groups.google.com/group/nodejs?hl=en?hl=en
>
>
>
> --
> Joshua Holbrook
> Engineer
> Nodejitsu Inc.
> j...@nodejitsu.com
>
> --
> Job Board: http://jobs.nodejs.org/
> Posting guidelines:
> https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
> You received this message because you are subscribed to the Google
> Groups "nodejs" group.
> To post to this group, send email to nodejs@googlegroups.com
> To unsubscribe from this group, send email to
> nodejs+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/nodejs?hl=en?hl=en
>

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to nodejs@googlegroups.com
To unsubscribe from this group, send email to
nodejs+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to