I chose `puts` primarily because of the custom "streams" which RSpec uses specifically for the deprecation stream: [`RaiseErrorStream `](https://github.com/rspec/rspec-core/blob/12e98d79/lib/rspec/core/formatters/deprecation_formatter.rb#L186) and [`FileStream `](https://github.com/rspec/rspec-core/blob/12e98d79/lib/rspec/core/formatters/deprecation_formatter.rb#L200).

Those only implement `puts`, which limited the `IO` duck typing checks.