Macソフトウェア配布が私のコルチゾール値を上げている
(blog.kronis.dev)- Claude Codeのプロファイル管理用に作った小さなGoユーティリティは、LinuxとWindows向けの静的実行ファイル配布は簡単だったが、macOSではダウンロードしたファイルに適用される**隔離(quarantine)**のせいで実行がブロックされ、手動解除の案内もユーザー体験を損ねる
- macOSバイナリに署名するためにApple Developer Programへの加入を試みたが、約7ドルの任意金額支払いモデルと、見込みダウンロード数が12〜24人程度では、年間サブスクリプション費用を負担しにくい
- Apple Developer Programの本人確認では、MacBookのWebカメラが身分証をうまく認識できず、スキャンのアップロードやiPhoneカメラ利用の案内もないまま失敗を繰り返したが、iPhoneアプリでは最初の試行で成功し、機材依存性が露呈した
- AppleのハードウェアやMシリーズチップは高く評価しているが、macOSを使うにはAutoRaise、Rectangle、DiscreteScrollのような補助ツールが必要で、Finder、ショートカット、ウィンドウフォーカス、アプリ終了の挙動が開発フローを不便にしている
- Windowsのコード署名もCertumコード署名が年209ユーロ前後、Azure Artifact Signingには地域・個人アカウントの制約があり、コード署名エコシステム全体がLet’s Encrypt以前のTLS証明書のように高価でアクセスしづらく見える
Macソフトウェア配布で露わになった障壁
- Claude Codeのプロファイル管理を簡単にする小さな開発者向けユーティリティを作る中で、Goツールチェーンにより複数プラットフォーム向けの静的実行ファイルを簡単にビルドできた
- 最初のリリースはccode.kronis.devとItch.ioページで確認でき、事前ビルド済みバイナリのダウンロード・購入とソースコードの確認が可能
- 現在のコードは未署名で、ユーティリティはまだ初期段階のため、まず無料で試し、役立つと思ったら後で支払う形が推奨されている
- Linux配布は
chmod +xの後で問題なく動作し、Windowsでは.exeを作成でき、SmartScreen警告も同じポップアップ内で回避できる - macOSではダウンロードしたソフトウェアに隔離(quarantine)が適用されて実行がブロックされ、Nextcloudで自分自身に共有したファイルでも同じ問題が起きる
- ターミナルで手動で隔離を解除するよう案内することはできるが、開発者なら受け入れられても、良いユーザー体験とは言えず、不審に思われる可能性もある
Apple Developer Program加入の費用と経済性
- 問題を解決するためにApple Developer Programに加入して実行ファイルに署名しようとしたが、年間サブスクリプション費用は小規模ユーティリティの配布規模に見合わなかった
- 配布予定のユーティリティはItch.ioで約7ドルの任意金額支払い(pay-what-you-want)モデルとして提供するつもりで、想定ダウンロード数は多くても12〜24件程度と見込んでいた
- ほとんどの人が0ドルを選べるうえ、VATとItch.ioの手数料を差し引くと、売上約50ドルから残るのは25ドル程度で、Apple Developer Programの約3か月分しか賄えない
- 公開配布のためにバイナリを提供するだけで費用がかかる仕組みは、趣味の開発者に不利であり、ソフトウェア開発の経済性を収益化中心へ押しやる
- デスクトップソフトウェアにはHomebrewがあるが、この経路を使うと数ドルでも料金を取りづらくなったり、Itch.ioのダウンロードページに
mac-homebrew-install-instructions.txtのような別案内を置く必要があり不自然になる - 費用をなくせばスパムのような別の問題が起こりうる点は認めつつも、非公開あるいはソース公開レベルのソフトウェアであっても、バイナリ配布に費用が発生する構造は負担になる
本人確認プロセスの摩擦
- Apple Developer Program加入手続きにおいて本人確認そのものは理解できるが、MacBookのWebカメラで身分証の写真撮影を求められた点が大きな問題だった
- M1 MacBook Airの内蔵カメラでは照明を変えても身分証の画質が十分でなく、何度試しても書類を正しく認識できなかった
- 同じローカルネットワークにiPhoneが接続されていても、それをカメラとして使う案内はなく、約10回試しても失敗し続けた
- その後メインのWebカメラを接続して試したが、近距離の書類を撮るためのオートフォーカスがなく、やはり十分ではなかった
- スキャン済み書類をアップロードする選択肢は提供されず、失敗のたびに一般的なエラーが表示され、加入手続きを最初からやり直す羽目になることが繰り返された
- iPhoneにアプリを直接インストールすると最初の試行で成功したが、iPhoneや高性能Webカメラを持たないユーザーにはさらに高い障壁になりうる
- 支払いは正常に処理され、すぐに開発者アカウントが有効化されたように見えたが、アプリにはメールを待つよう表示され、デスクトップアプリは加入試行自体を認識しないまま、手続きをやり直すよう表示した
- バックグラウンド処理や最終的整合性の問題かもしれないが、ユーザー視点ではアプリごとに加入状態が異なって見えるもどかしい流れになっている
Appleエコシステムへの蓄積した不満
- Appleハードウェアのビルド品質とMシリーズチップは高く評価しており、高性能モデルを買える人にとっては優れた開発マシンになりうる
- iPhone SE 2022も満足して使っていたが、Appleが低価格シリーズを廃止し、新しいeシリーズはより高価で、側面の消音モード切り替えとTouchIDを廃したことが、次のスマートフォンでAndroidに戻る理由になっている
- macOSを望む形で使うにはAutoRaise、Rectangle、DiscreteScrollのようなツールが必要になる
- 複数モニター間でウィンドウフォーカスを移す際に追加クリックが必要で、AutoRaiseは便利だがやや過敏に動作することがある
- Finderには「Cut」オプションがなく、キーボードショートカットは馴染みにくく、Control/Commandキーの構成はリモートデスクトップソフトウェアまで壊してしまう問題がある
- プログラムを閉じても実際には終了しないアプローチも不便で、8GB RAMのMacBookでAppleの閉じたエコシステムの中で開発しなければならない状況と相まって負担が大きい
- アプリ開発をAppleエコシステムに縛り付け、ソフトウェア署名に費用を求め、ハードウェアカメラの品質のせいで書類提出が妨げられ、iPhoneアプリを使った後も加入状態が明確に反映されない流れが、最大の不満につながっている
より良い本人確認と電子署名の事例
- 地元の食料品店でエナジードリンクを買うとき、SmartIDを使えば約20秒で本人確認と年齢確認ができる
- eParakstsを使えば、政府発行のIDカードとカードリーダー付きPC、またはスマートフォンアプリで、約1分で文書にデジタル署名できる
- その結果はEDOCコンテナ(ASIC-E)に添付されるか、PDFファイルに直接埋め込まれる適切な暗号学的署名になる
- 他国にも本人確認、年齢確認、文書署名、デジタルサービス向けの類似サービスが存在する可能性があり、すべての国が同じではなく、決済インフラにも制約がある
- それでも、バルト地域のいくつものソフトウェアパッケージが巨大テック企業の手続きよりうまく機能している状況は納得しがたい
Windowsコード署名とより広い費用の問題
- これはAppleだけの問題ではなく、Windowsのコード署名も費用負担が大きい
- Certumコード署名は比較的安価な選択肢の一つに見えるが、それでも年間約209ユーロが必要になる
- Azure Artifact SigningはBasicティアが月8.54ユーロでより良さそうに見えるが、Azureアカウントを設定してみると、米国・カナダ以外の個人は証明書に署名できず、EUでは組織のみがコード署名可能だった
- 現在のコード署名の領域は価格が過度に高く、TLS証明書がLet’s Encrypt以前に年間100ユーロ前後を要求していた状況に似ていると感じられる
- Let’s Encryptは多くのレントシーキング的な構造を置き換えたが、代替手段や競合が多くないため、巨大な単一障害点へ向かうリスクも併せ持っている
- コード署名も政府発行IDカードで署名できれば十分だ、という結論につながる
1件のコメント
Hacker Newsのコメント
Gatekeeperが嫌いなユーザーは、ターミナルで
sudo spctl —-master-disableを実行すれば 10秒で無効化できる大雑把すぎるとか安全ではないと言うことはできるが、何を望むのかは決める必要がある。Gatekeeperが生む摩擦を望むなら有効にしておけばいいし、嫌なら無効にすればいい。開発者がユーザーの代わりに決めることはできないし、自分のデバイスでどんなコードを実行するかはユーザーが決めるべきだ。デフォルトが制限的なのも、何をしているか分かっている人なら簡単に変えられるからだ
iOSには未署名ソフトウェアをインストールする方法がまったくなく、Androidもまもなくその手順が10秒ではなく24時間かかるようになるらしいが、これは実際に ユーザーの選択権 を奪う話で、ばかげている
ただし最新のmacOSには無効化できない別の制限も多く、それは本当に腹立たしい。Gatekeeperはその1つではないと思う。Sequoiaからはターミナルコマンドの後に設定でチェックボックスを押す必要があるので30秒くらいかかるかもしれないが、それでも大した問題ではないと思う
「Appleだけを信頼して他の誰も、さらには自分自身すら信頼しない」か、あるいは文字通り全員を信頼しろ、というのは善意ある実装ではない。Appleは誤った同一視や誤った二者択一で物語を作るのがうまい。かつてのセキュアブート論争でも、Appleは「Appleが暗号鍵を持つか、暗号化しないか」という構図に持ち込み、人々は「なぜ自分のデバイスの鍵を自分で持てないのか」と問うのを忘れてしまった
しかもセキュリティ機能を無効にせずにだ。この追加の摩擦は自分の安全のためというより、開発者に配布のためAppleへ年会費を払わせるために近く見える。安全にまったく役立たないと言いたいわけではないが、比重は前者に寄っていると思う
以前はこれが可能だったのに、Appleがそれを廃止し、毎回 システム設定 に入らなければならない非常にいら立たしい手順に変えてしまった
そうすれば良い配布慣行を保ちながら、全体的な好感も得られる
警告を表示して今回だけ実行できるようにするか、その後は普通に実行できるよう許可すればいいのではないか
20年間、MacとPC向けソフトウェアをインディーで開発してきたが、筆者の気持ちはよく分かる
Appleは開発者に「我々のプラットフォーム向けにアプリを作らせてもらえることに感謝すべきだ」と考えているように感じられる。記事ではAppleの 後方互換性軽視 には触れていなかったが、Appleは開発者のシステム全体を定期的に絨毯爆撃のように作り直すのが好きだ。10年前に作ったアプリを最新のmacOSで動かしてみれば、おそらく動かない可能性が高い
Microsoftは後方互換性がはるかに良く、開発者プログラムへの加入も強制しないが、Windows向けAuthenticodeデジタル証明書を更新するたびにひどく金を取られる。デジタル証明書だけでも年99ドルより高く、完全に商売になっている
MicrosoftのAzure Artifact SigningはAppleの年会費に近いが、1か月前からこれで署名したインストーラーがSmartScreen警告を頻繁に出す。どちらもMicrosoftが管理しているのにそうなる
Storeという選択肢も組織向けでは無料ではなく、一度きりの登録料がかかる。さらに悪いのは、簡略化されたライセンス/試用版モデルを強制する点だ。有償アップグレード、年間サポート契約、制御されたアップデート、延長試用版を使うB2Bソフトウェアには普通合わない
https://github.com/Azure/artifact-signing-action/issues/128#...
AppleはABIやAPIの安定性を維持する代わりに、毎年新しいiOSバージョンで既存アプリが壊れないよう何千人もの開発者に継続的な保守負担を押し付けている。この時間は、バグ修正、機能追加、新しいアプリ開発のような、もっと生産的なことに使えたはずだ。安定性がエコシステム全体にもたらす乗数効果を考えると、間違ったトレードオフに見える
AppleはApp Storeの低品質アプリ過多を減らすためにアプリが死ぬことを望んでいるようだが、もっと良い方法があるはずだ。アプリの露出と発見については、今でも人間によるキュレーションだけが信頼できるように見える
iOSアプリの大半はゲームだが、他のゲームプラットフォームと違ってiOS開発者はゲームを動き続けさせるため毎年アップデートしなければならない。AppleはiOSとmacOSの両方で32ビットゲームを喜んで切り捨て、多くのゲームは64ビットへ移行できなかった。Nintendo DS/DSi/3DSでは2004〜2020年の主要・小規模ハードウェア改訂や数十回のファームウェア改訂を経てもゲームは概ね動き続け、Switchも2017年以降Switch 1と2にまたがって概ねゲームが動いているのと対照的だ
自分が使う大企業向けアプリの多くはいまだにIntel向けで、多くの性能を捨てている。Rosettaが廃止されれば、結局は変えることになるだろう。オープンソースアプリはすべてネイティブだ
筆者として、記事に素早いアップデートを反映した
公平を期して言えば、Windows向けに何かを署名しようとしてCertumのような業者の価格を見ると、Appleだけが突出して高いわけではないのかもしれない。みんなそんな感じに見える: https://www.certum.eu/en/code-signing-certificates/
Windows側をさらに見るとAzure Artifact Signingもあり、月8.54ユーロで安いように見えるが、EUの個人利用者は対象外だ。米国とカナダの個人だけが利用でき、EUでは組織のみ対応している。ここではSIA、つまりLtd.相当の会社を先に作る必要がありそうで、いずれ予定にはあったがAzureを使う上では障害になる: https://azure.microsoft.com/en-us/products/artifact-signing
口調が苛立っていたかもしれないが、コード署名業界 には何らかの形でLet’s Encryptのような瞬間が必要だ、という点は強く言っておきたい。少なくともAzure Artifact Signingが試みたように一般化され、すべてのプラットフォームで個人開発者にも利用可能であるべきだ。ただ、プラットフォーム側が意図的に囲い込みをしているので実現しそうにない。コード署名そのものが嫌いなわけではなく、正しく実施されれば多くのWebサイトにおけるTLSのように良いアイデアだ
8年前のStack Overflowの議論でも、Microsoft SmartScreen警告を即座かつ恒久的に消す確実な方法は、Microsoft承認の認証局によるEVコード署名証明書を買ってそれでアプリに署名することだと言われている
こうしたEV証明書は通常、年300〜700ドル程度で、価格比較が必要であり、登録済み事業者にしか発行されない。個人開発者なら個人事業主であり、有効な事業者登録が必要だ
https://stackoverflow.com/questions/48946680/how-to-avoid-th...
それでAppleのノートPCで申請手続きを続けたら、さらに深い穴に落ちた。同じ政府発行IDを使い続けていたのに、なぜか競合する2つの申請に分裂し、片方は成功したようで片方は失敗したようだった。良い点は金だけは取られたこと、悪い点は買ったものが渡されなかったことだ。結局、数週間にわたって個人情報を再アップロードする羽目になり、これが後で問題を起こさないはずがない。すべては、自分が作ったvibe-codedな寄せ集めを自分のスマホに入れるためだった
エンドユーザーにこうしたバイナリを配布する方法を調べる中で筆者と同じ苛立ちを感じ、正確なやり方を整理した ガイド を書いた
Appleのドキュメントは驚くほど不十分で、関連ブログ記事も見つからなかったため、試行錯誤とGitHubの人気オープンソースプロジェクトを見ながら、動作の仕組みをリバースエンジニアリングするしかなかった
https://ofek.dev/words/guides/2025-05-13-distributing-comman...
https://successfulsoftware.net/2018/11/16/how-to-notarize-yo...
https://successfulsoftware.net/2023/04/28/moving-from-altool...
約1年前に 完全にLinuxへ移行した 最大の理由は、おそらくこれだった
ソフトウェアを作って人に使ってもらうことができないのにうんざりした。解決策はVS Code風の「この作成者を信頼します」ダイアログ程度かもしれないが、それも少し的外れに感じる。Linuxで作るのは本当に楽しく、macOSで恋しいものはほとんどない。恋しかったものは自分でプログラムにして [1][2] 人に渡した。こんなに難しいことになるなんて誰が想像しただろう
https://github.com/zackb/tether
https://github.com/zackb/hyprwat
オープンソースや、より広い意味での開発を気にする人がこれを見て「そうだ、これこそ自分が使いたいOSだ」と言えるのか分からない
多くの開発者が薄いノートPC1台のために、なぜこれほど多くを妥協しようとするのか本気で理解しにくい
G4 PowerBookの時代からMacをメイン開発マシンとして使ってきて、Linuxへ何度か移ろうとしたが、いつもより悪い体験だった。こういう話を見ると、自分たちは本当にコンピューターをかなり違う形で使っているのだと改めて思う
奇妙なハードウェア非互換、ぎくしゃく感、仕事をするよりマシンの保守に時間を使いすぎる。利用者の少ない適当なFOSSアプリを落とすために時々
xattr -d com.apple.quarantineを実行しなければならない程度は、Linuxユーザーが経験することに比べれば大したことではないこの問題については友人の中で2番目に頑固なほうだが、パンデミックの間は数年間デスクトップだけを使い、その後も5年間MacノートPCを避けてきたが、本当にひどかった。結局、新しいM5 MacBook AirはWebブラウジング作業ではより速い可能性が高く、組んだばかりの最新Xeon怪物ビルドとコードコンパイルでも妙に競争でき、しかもファンすらないと気づいて降参した
自分としてはもう決着がついた。Appleは画面品質を除くあらゆる面で勝った。OLEDに慣れてしまったのは残念で、ノートPCにタッチスクリーンを載せないAppleの立場にも根本的には同意しない。子どもたちと多くの時間を過ごすようになってからは、なおさらそう思う
Linuxではツールを実行するのに
chmod +xが必要でも気にしないのに、macOSでxattrを実行しなければならないことは、ブログ記事を1本書いて不満を述べるほどのことなのかと思う真面目に気になるのだが、Windows 11は本当に信頼されていない
.exeを警告なしで実行してくれるのか?これは開発者向けのClaude Codeツールだ。潜在的な利用者は
xattrコマンドくらい実行できて当然だと思う。それができないなら、Claude Codeに触るべきではないかもしれない。ここには自分なりの追加的な「門番」意識も少しあるこういうユーザー向けには、
xattrコマンドまで処理するcurl -sL [https://github.com/myrepo/installme.sh](<https://github.com/myrepo/installme.sh>) | bashスクリプトを作ることもできる一般的なmacOSエンドユーザーはコマンドラインツールを使わないか、Homebrewのようなものを使う。バイナリ配布の正しいやり方はおそらく pkgインストーラー だろう
.exe/ PEファイルをそのまま実行させないMicrosoft Defender SmartScreenが管理しており、人を怖がらせるポップアップを出す。以前にやったことがなければ、プログラムを実行するためにクリックして回避する手順も直感的ではない
深い知識のない人を怖がらせるには十分だ。もちろんこれらはすべて無効にできる
ユーザーに「ファイルをプログラムとして実行することを許可」のチェックボックスを押してくれと説明して納得してもらうほうが、
xattrのような不透明なコマンドライン命令を教えるよりずっと簡単だ昨日この 本人確認手続き を通ったが、たぶん8回目の試行くらいでやっと成功した
本当にひどい設計だ。今はLLCとアカウントを結び付けるために、どこかの第三者と書類のやり取りをしている。ただソフトウェアを書いて配布できればいいのにと思うが、iOS独占は1つしかないのだから、それに合わせて踊るしかない
1年前なら同意していただろうが、今は反対側に立つ
今のソフトウェアに含まれる マルウェア の量は指数関数的に増えている。悪意があるかないかに関係なく、すべてのソフトウェアに課される痛ましい税であるのは事実だが、より良い仕組みが見つかるまで、この方式は一定割合の悪意ある行為者を諦めさせるだろう。特に料金を払わなければならない点が大きい
Macユーザーとして、開発者がこのソフトウェアを届けるためにかなりのコストを払ったかどうかを知りたい。自分にとっては有用なシグナルだ。料金も払わずパスポートもアップロードしていないなら、これを実行することで負うリスクをかなり慎重に考えたい
身分証アップロード は絶対にしてはいけない
それがそのプラットフォーム向け開発をしないという意味なら、そのプラットフォーム向けには開発しなければいい