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

Reply via email to