Project

General

Profile

Actions

Feature #20673

open

Enable native SOCKS support by default

Added by MatzFan (Brian Cohen) 3 days ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:118831]

Description

I'd like to see future Rubies have native SOCKS support enabled by default.

Currently Rubies must be compiled with the --enable-socks=true option in order to provide access to the SOCKSSocket class, through which network connections may be made via the SOCKS protocol.

My proposal is simply to deprecate the --enable-socks option IFO of SOCKS support being enabled by default.

Use cases: To the best of my knowledge, the most commonly used SOCKS proxies are Dante and Tor. I know little of the former, but the latter is used as an anonymity tool. For example, the Tor Browser (based on Firefox) is built on the tor SOCKS proxy. Users wishing to make requests through the SOCKS protocol (through one of these proxies or otherwise) must compile their own Ruby with SOCKS enabled, or install Dante/Tor and make requests through these via another tool - e.g. a Selenium-driven browser, suitably configured. Alternatively, a lower level library like cURL can be utilized.

Discussion: Most users do not build their own Rubies, but instead use the standard Rubies available from Ruby managers like rvm or rbenv (in both production and CI environments). Users needing to use the SOCKS protocol natively with one of these Rubies are presently reliant on the socksify Ruby gem (> 60M downloads). Declaration: I am the gem's current maintainer. The gem was originally built to provide native SOCKS support to users of these 'standard' Rubies via patches to the Net/HTTP and other Ruby core libraries. The current gem patches the private method Net::HTTP#connect in order to achieve this. This is a brittle and highly undesirable state of affairs and all code built using socksify is of course subject to breakage with each new Ruby release. It is difficult to gauge the exact nature and extent of the user need, but of the 60M Socksify downloads 20M have taken place is the last few years since I became maintainer. I consider this a significant user base.

Many other languages provide native SOCKS support - e.g. Python has PySocks.

Fundamentally, is there any reason NOT to enable SOCKS support - would it break anything? I'd dearly like to retire the Socksify 'hack' in due course and see Ruby join the list of languages that offer SOCKS support by default - in all future Rubies.

Many thanks for your consideration.

No data to display

Actions

Also available in: Atom PDF

Like0