ubuntuでObjective-C(2.0)を使ってみる

ubuntuObjective-Cを使うのに、darling shellと言うものがあるらしいとネットにあったので、インストールしてみた。ubuntuのバージョンは20.04, kernel は uname -a で調べると、

Linux mate xxxxxx 5.4.0-31-generic #35-Ubuntu SMP Thu May 7 20:20:34 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux でした。他のLinuxでは、インストールは出来たとしても、ある意味すべて上手く行きませんでした。

で、これで何ができるの?と調べても情報は殆なく、気紛れに Homebrew をインストールしようとしたのですが、何か可怪しいメッセージで、何度かやってみたら、何故かインストールできました。が、cask は使えないので結局何もできないようでした。

それなら、Objective-C が使えないものかと、簡単なサンプルを作って

$ clang sample.m -o sample -framework Foundation

に掛けると、何事もなく終わるので使えるようです。サンプルのコードは、

#import <Foundation/NSObject.h>

int main(){
NSLog(@"こんにちは\n");
return 0;
}

この clang のバージョンを見ると

Apple LLVM version 9.0.0 (clang-900.0.39.2)
Target: x86_64-apple-darwin16.0.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

これなら今まで買ってきたObjective-C の参考書が使えそうなのでネットからそのコードをダウンロードして片っ端らから試して見ようと思ったのですが、躓きました。

#import <Foundation/Foundation.h> はインポートエラーでできません。なので、部分的にインポートするしかないようです。又 GUI 関係も当分は出来なさそうです。

この darling shell インストールの感想として言って置かなければならないことは、非常に時間が掛かるということです。CPU core i5 3.2GHz SSD USB3接続で4時間は見て置かなければならないようです。また、注意しなければならないことに、python-six がないと、エラーで終わってしまいます。特に最初は順調だったとしても95%過ぎでは、1%進むの亀の歩みです。が、この部分がないと、lkm を make できないようです。これを省略したdebパッケージが、18.04用にあるみたいですが、20.04ではAPI違いでshell がアボートします。しかし、現行18.04ではclangは使えないようです。

私が何故 そんな思いまでして、LinuxDarwin を使ってみようと思ったかは、10年前まではMac機onlyだったのが資金的にそんな余裕はなくなり、買わせられるだけの世界に見切りを付けたからです。今コロナウイルスの影響で、世界的にも高嶺の花のMac製品は私にとって命取りです。だから、古いマシンでLinuxを使うようになりました。

この回の最後として、だとしても LinuxApple Darwin が動くこと自体素晴らしい!!

追記1:ubuntuは頻繁にupdateさせられるので、linux-header が変わるとshellに入れなくなります。こんなエラーメッセージが出てきます。例えば、modprobe: FATAL: Module darling-mach not found in directory /lib/modules/5.4.0-31-generic
Failed to load the kernel module と出た場合、対処法はもう一度 make lkm ;sudo make lkm_install をやると良いようです。

追記2(20.5.22):darling shellでこのメッセージが出てきたら

Loaded the kernel module
Bootstrapping the container with launchd...
Cannot determine your user name

これはDarwinのkernelが見つからず、bashが起動できないと私は判断した。

Linuxにはディスクトップが何種類かあるけれども、インストールした最初のディスクトップは特殊でLinux bashが他のディスクトップと判断し拒んだ形なのだろう?

なので、他のディスクトップをインストールしてログインし直すか、ターミナルを変えてみたりすると良さそうです。