<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<id>http://unicorn.bogomips.org/NEWS.atom.xml</id>
<title>Unicorn news</title>
<subtitle>Rack HTTP server for fast clients and Unix</subtitle>
<link rel="alternate" type="text/html" href="http://unicorn.bogomips.org/NEWS.html"/>
<updated>2012-01-28T09:18:39Z</updated>
<entry>
<title>unicorn 4.2.0</title>
<updated>2012-01-28T09:18:39Z</updated>
<published>2012-01-28T09:18:39Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v4.2.0"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v4.2.0</id>
<content type="text">The GPLv3 is now an option to the Unicorn license.  The existing GPLv2
and Ruby-only terms will always remain options, but the GPLv3 is
preferred.

Daemonization is correctly detected on all terminals for development
use (Brian P O'Rourke).

Unicorn::OobGC respects applications that disable GC entirely
during application dispatch (Yuichi Tateno).

Many test fixes for OpenBSD, which may help other *BSDs, too.
(Jeremy Evans).

There is now _optional_ SSL support (via the "kgio-monkey"
RubyGem).  On fast, secure LANs, SSL is only intended for
detecting data corruption that weak TCP checksums cannot detect.
Our SSL support is remains unaudited by security experts.

There are also some minor bugfixes and documentation
improvements.

Ruby 2.0.0dev also has a copy-on-write friendly GC which can save memory
when combined with "preload_app true", so if you're in the mood, start
testing Unicorn with the latest Ruby!</content>
<content type="xhtml">
<pre>The GPLv3 is now an option to the Unicorn license.  The existing GPLv2
and Ruby-only terms will always remain options, but the GPLv3 is
preferred.

Daemonization is correctly detected on all terminals for development
use (Brian P O'Rourke).

Unicorn::OobGC respects applications that disable GC entirely
during application dispatch (Yuichi Tateno).

Many test fixes for OpenBSD, which may help other *BSDs, too.
(Jeremy Evans).

There is now _optional_ SSL support (via the "kgio-monkey"
RubyGem).  On fast, secure LANs, SSL is only intended for
detecting data corruption that weak TCP checksums cannot detect.
Our SSL support is remains unaudited by security experts.

There are also some minor bugfixes and documentation
improvements.

Ruby 2.0.0dev also has a copy-on-write friendly GC which can save memory
when combined with "preload_app true", so if you're in the mood, start
testing Unicorn with the latest Ruby!
</pre>
</content>
</entry>
<entry>
<title>unicorn 4.1.1 - fix last-resort timeout accuracy</title>
<updated>2011-08-25T21:30:11Z</updated>
<published>2011-08-25T21:30:11Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v4.1.1"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v4.1.1</id>
<content type="text">The last-resort timeout mechanism was inaccurate and often
delayed in activation since the 2.0.0 release.  It is now fixed
and remains power-efficient in idle situations, especially with
the wakeup reduction in MRI 1.9.3+.

There is also a new document on application timeouts
intended to discourage the reliance on this last-resort
mechanism.  It is visible on the web at:

  http://unicorn.bogomips.org/Application_Timeouts.html</content>
<content type="xhtml">
<pre>The last-resort timeout mechanism was inaccurate and often
delayed in activation since the 2.0.0 release.  It is now fixed
and remains power-efficient in idle situations, especially with
the wakeup reduction in MRI 1.9.3+.

There is also a new document on application timeouts
intended to discourage the reliance on this last-resort
mechanism.  It is visible on the web at:

  http://unicorn.bogomips.org/Application_Timeouts.html
</pre>
</content>
</entry>
<entry>
<title>unicorn 4.1.0 - small updates and fixes</title>
<updated>2011-08-20T00:33:13Z</updated>
<published>2011-08-20T00:33:13Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v4.1.0"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v4.1.0</id>
<content type="text">* Rack::Chunked and Rack::ContentLength middlewares are loaded
  by default for RACK_ENV=(development|deployment) users to match
  Rack::Server behavior.  As before, use RACK_ENV=none if you want
  fine-grained control of your middleware.  This should also
  help users of Rainbows! and Zbatery.

* CTL characters are now rejected from HTTP header values

* Exception messages are now filtered for [:cntrl:] characters
  since application/middleware authors may forget to do so

* Workers will now terminate properly if a SIGQUIT/SIGTERM/SIGINT
  is received while during worker process initialization.

* close-on-exec is explicitly disabled to future-proof against
  Ruby 2.0 changes [ruby-core:38140]</content>
<content type="xhtml">
<pre>* Rack::Chunked and Rack::ContentLength middlewares are loaded
  by default for RACK_ENV=(development|deployment) users to match
  Rack::Server behavior.  As before, use RACK_ENV=none if you want
  fine-grained control of your middleware.  This should also
  help users of Rainbows! and Zbatery.

* CTL characters are now rejected from HTTP header values

* Exception messages are now filtered for [:cntrl:] characters
  since application/middleware authors may forget to do so

* Workers will now terminate properly if a SIGQUIT/SIGTERM/SIGINT
  is received while during worker process initialization.

* close-on-exec is explicitly disabled to future-proof against
  Ruby 2.0 changes [ruby-core:38140]
</pre>
</content>
</entry>
<entry>
<title>unicorn 4.0.1 - regression bugfixes</title>
<updated>2011-06-29T18:59:07Z</updated>
<published>2011-06-29T18:59:07Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v4.0.1"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v4.0.1</id>
<content type="text">This release fixes things for users of per-worker "listen"
directives in the after_fork hook.  Thanks to ghazel@gmail.com
for reporting the bug.

The "timeout" configurator directive is now truncated to
0x7ffffffe seconds to prevent overflow when calling
IO.select.</content>
<content type="xhtml">
<pre>This release fixes things for users of per-worker "listen"
directives in the after_fork hook.  Thanks to ghazel@gmail.com
for reporting the bug.

The "timeout" configurator directive is now truncated to
0x7ffffffe seconds to prevent overflow when calling
IO.select.
</pre>
</content>
</entry>
<entry>
<title>unicorn 4.0.0 - for mythical hardware!</title>
<updated>2011-06-27T09:05:43Z</updated>
<published>2011-06-27T09:05:43Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v4.0.0"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v4.0.0</id>
<content type="text">A single Unicorn instance may manage more than 1024 workers
without needing privileges to modify resource limits.  As a
result of this, the "raindrops"[1] gem/library is now a required
dependency.

TCP socket defaults now favor low latency to mimic UNIX domain
socket behavior (tcp_nodelay: true, tcp_nopush: false).  This
hurts throughput, users who want to favor throughput should
specify "tcp_nodelay: false, tcp_nopush: true" in the listen
directive.

Error logging is more consistent and all lines should be
formatted correctly in backtraces.  This may break the
behavior of some log parsers.

The call stack is smaller and thus easier to examine backtraces
when debugging Rack applications.

There are some internal API changes and cleanups, but none that
affect applications designed for Rack.  See "git log v3.7.0.."
for details.

For users who cannot install kgio[2] or raindrops, Unicorn 1.1.x
remains supported indefinitely.  Unicorn 3.x will remain
supported if there is demand.  We expect raindrops to introduce
fewer portability problems than kgio did, however.

[1] http://raindrops.bogomips.org/
[2] http://bogomips.org/kgio/</content>
<content type="xhtml">
<pre>A single Unicorn instance may manage more than 1024 workers
without needing privileges to modify resource limits.  As a
result of this, the "raindrops"[1] gem/library is now a required
dependency.

TCP socket defaults now favor low latency to mimic UNIX domain
socket behavior (tcp_nodelay: true, tcp_nopush: false).  This
hurts throughput, users who want to favor throughput should
specify "tcp_nodelay: false, tcp_nopush: true" in the listen
directive.

Error logging is more consistent and all lines should be
formatted correctly in backtraces.  This may break the
behavior of some log parsers.

The call stack is smaller and thus easier to examine backtraces
when debugging Rack applications.

There are some internal API changes and cleanups, but none that
affect applications designed for Rack.  See "git log v3.7.0.."
for details.

For users who cannot install kgio[2] or raindrops, Unicorn 1.1.x
remains supported indefinitely.  Unicorn 3.x will remain
supported if there is demand.  We expect raindrops to introduce
fewer portability problems than kgio did, however.

[1] http://raindrops.bogomips.org/
[2] http://bogomips.org/kgio/
</pre>
</content>
</entry>
<entry>
<title>unicorn 3.7.0 - minor feature update</title>
<updated>2011-06-09T20:51:28Z</updated>
<published>2011-06-09T20:51:28Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v3.7.0"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v3.7.0</id>
<content type="text">* miscellaneous documentation improvements
* return 414 (instead of 400) for Request-URI Too Long
* strip leading and trailing linear whitespace in header values

User-visible improvements meant for Rainbows! users:

* add :ipv6only "listen" option (same as nginx)</content>
<content type="xhtml">
<pre>* miscellaneous documentation improvements
* return 414 (instead of 400) for Request-URI Too Long
* strip leading and trailing linear whitespace in header values

User-visible improvements meant for Rainbows! users:

* add :ipv6only "listen" option (same as nginx)
</pre>
</content>
</entry>
<entry>
<title>unicorn 3.6.2 - fix Unicorn::OobGC module</title>
<updated>2011-04-30T06:40:22Z</updated>
<published>2011-04-30T06:40:22Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v3.6.2"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v3.6.2</id>
<content type="text">The optional Unicorn::OobGC module is reimplemented to fix
breakage that appeared in v3.3.1.  There are also minor
documentation updates, but no code changes as of 3.6.1 for
non-OobGC users.

There is also a v1.1.7 release to fix the same OobGC breakage
that appeared for 1.1.x users in the v1.1.6 release.</content>
<content type="xhtml">
<pre>The optional Unicorn::OobGC module is reimplemented to fix
breakage that appeared in v3.3.1.  There are also minor
documentation updates, but no code changes as of 3.6.1 for
non-OobGC users.

There is also a v1.1.7 release to fix the same OobGC breakage
that appeared for 1.1.x users in the v1.1.6 release.
</pre>
</content>
</entry>
<entry>
<title>unicorn 1.1.7 - major fixes to minor components</title>
<updated>2011-04-30T06:33:27Z</updated>
<published>2011-04-30T06:33:27Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v1.1.7"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v1.1.7</id>
<content type="text">No changes to the core code, so this release only affects users
of the Unicorn::OobGC and Unicorn::ExecCGI modules.
Unicorn::OobGC was totally broken by the fix in the v1.1.6
release and is now reimplemented.  Unicorn::ExecCGI (which
hardly anybody uses) now returns proper HTTP status codes.</content>
<content type="xhtml">
<pre>No changes to the core code, so this release only affects users
of the Unicorn::OobGC and Unicorn::ExecCGI modules.
Unicorn::OobGC was totally broken by the fix in the v1.1.6
release and is now reimplemented.  Unicorn::ExecCGI (which
hardly anybody uses) now returns proper HTTP status codes.
</pre>
</content>
</entry>
<entry>
<title>unicorn 3.6.1 - fix OpenSSL PRNG workaround</title>
<updated>2011-04-26T23:06:05Z</updated>
<published>2011-04-26T23:06:05Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v3.6.1"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v3.6.1</id>
<content type="text">Our attempt in 3.6.0 to workaround a problem with the OpenSSL
PRNG actually made the problem worse.  This release corrects the
workaround to properly reseed the OpenSSL PRNG after forking.</content>
<content type="xhtml">
<pre>Our attempt in 3.6.0 to workaround a problem with the OpenSSL
PRNG actually made the problem worse.  This release corrects the
workaround to properly reseed the OpenSSL PRNG after forking.
</pre>
</content>
</entry>
<entry>
<title>unicorn 3.6.0 - small fixes, PRNG workarounds</title>
<updated>2011-04-21T06:46:08Z</updated>
<published>2011-04-21T06:46:08Z</published>
<author>
<name>Eric Wong</name>
<email>normalperson@yhbt.net</email>
</author>
<link rel="alternate" type="text/html" href="http://bogomips.org/unicorn.git/tag/?id=v3.6.0"/>
<id>http://bogomips.org/unicorn.git/tag/?id=v3.6.0</id>
<content type="text">Mainly small fixes, improvements, and workarounds for fork() issues
with pseudo-random number generators shipped with Ruby (Kernel#rand,
OpenSSL::Random (used by SecureRandom and also by Rails).

The PRNG issues are documented in depth here (and links to Ruby Redmine):

  http://bogomips.org/unicorn.git/commit?id=1107ede7
  http://bogomips.org/unicorn.git/commit?id=b3241621

If you're too lazy to upgrade, you can just do this in your after_fork
hooks:

  after_fork do |server,worker|
    tmp = srand
    OpenSSL::Random.seed(tmp.to_s) if defined?(OpenSSL::Random)
  end

There are also small log reopening (SIGUSR1) improvements:

* relative paths may also be reopened, there's a small chance this
  will break with a handful of setups, but unlikely.  This should
  make configuration easier especially since the "working_directory"
  configurator directive exists.  Brought up by Matthew Kocher:
  http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/900

* workers will just die (and restart) if log reopening fails for
  any reason (including user error).  This is to workaround the issue
  reported by Emmanuel Gomez:
  http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/906</content>
<content type="xhtml">
<pre>Mainly small fixes, improvements, and workarounds for fork() issues
with pseudo-random number generators shipped with Ruby (Kernel#rand,
OpenSSL::Random (used by SecureRandom and also by Rails).

The PRNG issues are documented in depth here (and links to Ruby Redmine):

  http://bogomips.org/unicorn.git/commit?id=1107ede7
  http://bogomips.org/unicorn.git/commit?id=b3241621

If you're too lazy to upgrade, you can just do this in your after_fork
hooks:

  after_fork do |server,worker|
    tmp = srand
    OpenSSL::Random.seed(tmp.to_s) if defined?(OpenSSL::Random)
  end

There are also small log reopening (SIGUSR1) improvements:

* relative paths may also be reopened, there's a small chance this
  will break with a handful of setups, but unlikely.  This should
  make configuration easier especially since the "working_directory"
  configurator directive exists.  Brought up by Matthew Kocher:
  http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/900

* workers will just die (and restart) if log reopening fails for
  any reason (including user error).  This is to workaround the issue
  reported by Emmanuel Gomez:
  http://thread.gmane.org/gmane.comp.lang.ruby.unicorn.general/906
</pre>
</content>
</entry>
</feed>

