Rの32bit版WindowsのサポートはR 4.1.xまで

R 4.1が来月リリースされますが、リリースノートの1番上にこんなことが書かれています。 32bit版Windowsのサポートは4.1系で終了、つまり、マイナーバージョンは年に1度のペースで上がるので4.2がリリースされる次の春までで終わります。

FUTURE DIRECTIONS

  • It is planned that the 4.1.x series will be the last to support 32-bit Windows, with production of binary packages for that series continuing until early 2023.

(R: R News)

Microsoftは32bit版Windowsの提供は1年前に終了しているので、いつか来るだろうと予想していましたが、思ったより早かったです。

32bit版Windowsとかそもそも誰も使ってなくない? 何が関係あるの?

...と思うじゃないですか。

CRANのパッケージはさまざまな環境(LinuxmacOSWindowsSolaris)でテストされていて、1つでもCRAN上のCIがコケると問題とみなされてパッケージ削除の憂き目に遭います。 中でも、つらみの二大巨塔と言われているのがWindowsSolarisです。多くのパッケージ開発者はmacOSLinuxを使っていて手元にないからです。

Solarisの話は置いておいて*1Windowsをさらに難しくしているのは、 WindowsのRは64bit版と32bit版が提供されており、どちらでもパッケージがインストールできるようにする必要がある、という要求です。 多くのライブラリは64bitの環境でしか使われていないので、32bitにしたときに予期せぬエラーが発生したりします。 もちろん、アーキテクチャを考慮しきれていないコードが悪い、という評価もできますが、そうは言ってもサポート対象を広げるには労力が必要です。 Microsoftが開発しているLightGBMですら32bit版Windowsのエラーを時々踏んでいるので、況や一般の開発者をや、という感じはしますよね。

さて、なぜこんな要求がいまだにあるのか。 「32bit版とか誰も使ってなくない?」と私も思ってたんですけど、Twitterでツイートするとこういう情報を教えてもらって、なるほどなあとなりました。 64bit版Windowsを使っていても32bit版のアプリケーションが動いている、ということはけっこうあるようです。 なかなか難しいものですね。

これがどう影響するか

4.2がリリースされても、更にその次のバージョンが出るまでは4.1(oldrel)のチェックが動いているので、その間は32bit関連の何らかの問題を踏む可能性があります。 そういう場合に手っ取り早い対処は、DESCRIPTION

Depends: R (>= 4.2)

と書くことです。R 4.1以前のサポートを切る、つまり、32bitのサポートを切る、ということです。 いちいち32bitでの動作確認をするよりは、こっちを選ぶ開発者が多くなるでしょう。

そうするとどうなるかというと、Windowsだけではなく、すべてのOSで、バージョン4.1以前のRではそのパッケージがインストールできなくなります。 これは、バージョンを上げづらい環境でRを使っているユーザーにはちょっと苦しいかもしれません。 たとえば、共用のLinuxサーバー上にインストールしているRとかはなかなかバージョンを上げられなかったりします。 もちろん過去のアーカイブは残ってるので remotes::install_version() などでインストールはできますが、依存関係の解決とかは自分でがんばる必要があり、やや面倒です。 RStudio Package Managerで在りし日のスナップショットを使う、といった対応が必要になるかもしれません。

まとめ

備えよう。

*1:昔はSPARCだったので「big endianの環境なんて手元にねーよ!」という感じで更に辛かったのではないかと推測。。