永遠のドックを探して – ランブドック

2026/08/29 11:43

永遠のドックを探して – ランブドック

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

Lambdock は、Wayland ディスプレイサーバープロトコル(

gtk4-layer-shell
を介して)に特化設計された、現代的で超ハック可能なデスクトップアプリケーションです。macOS の Dock と対抗するために、フルなランタイムでの可視性及び Lisp による洞察を目指しています。その核となる革新は、独自のアーキテクチャにあります:高性能 C レンダリングエンジンに埋め込まれた Guile Scheme インタープリタを融合させた構成です。これにより「双方向の実行」が可能となり、Scheme プロシージャが実行中の C エンジン内で直接アクションをトリガーし、Dock の動的生成やリアルタイムでのステート変更を実現します。ビルトインのUnix ドメインソケット REPL(デフォルトは
/tmp/lambdock-repl.sock
)を通じて、ユーザーはプログラムを再起動せずに応用ステートの即時修正、カスタムテーマの再読み込み、システムモニターの調整などが可能です。マルチ Dock オーケストレーションシステムにより、
~/.config/lambdock/
settings.scm
に対応するファイルを監視することで、異なる画面に複数の独立した Dock を設置できます。新しいファイルを作成すると新しい Dock が生成され、それを削除すればインスタンスは安全に破棄されます。KDE Plasma、Sway、Hyprland、Niri などのコンポジターと互換性を持つ一方で、プロトコルの制限により GNOME との対応は現時点では実装されていません。Guix、Nix、RPM(OBS)などのパッケージマネージャから入手可能な Lambdock は、高度なスクリプト手順を通じて、技術的知識を有するユーザーにデスクトップ体験に対する完全な制御を提供します。

本文

lambdock の物語:Wayland ネイティブデスクトップドックへの究極の道

lambdock は、現代的で極めてハッカブル(改修可能)な、Wayland ネイティブなデスクトップドックアプリケーションです。C と Guile Scheme + GTK4 を使用し、対話型の REPL を備えています。

物語の序章:夢と探求

私はデジタルライフの鑑賞者であり、「目の彩り」を愛するワークフロー最適化の愛好家として、究極のデスクトップドックを求めていました。

2026 年 7 月 30 日、ついにその物語が始まりました。lambdock は単なる模倣ではなく、完全なランタイムでの検査可能性無限のハッカビリティ、そしてLisp 的啓蒙によって macOS や既存ドックの体験を超越する存在へと進化しました。

この道筋は、思考のプロセスから始まり、失敗したプロトタイプの墓場を通り、困難な戦いを乗り越え、GTK4 C ランタイムへの征服を経て、ついに息づく Lisp 心臓の埋め込みに辿り着きました。

永遠のドックへの探求

Wayland への移行を模索するユーザーは、Cairo-Dock や Plank のような深くハッカブルなドックの喪失を経験しました。2026 年現在も、他のプロジェクトは Wayland 互換性を確保するため尽力していますが、レイアウト配置ダイナミックなウィンドウ追跡自動非表示機能、そして流体ホバー物理演算といった機能を統合した真のアプリケーションドックを実現するには至難の業でした。

lambdock の物語はレジリエンス(回復力)そのものです。数え切れないほどのパラダイムとプロトタイプ実証(PoC)が破綻する前に、このビジョンを形にするための決断がありました。

ベッドで HackerNews を読みながら思考が巡る瞬間、突然絶対的な明晰さが訪れました。なぜなら、idiomatic な現代 GTK4を使用し、それを記述している言語であるCそのものを用いるべきだったからです。

  • C は
    libguile.h
    を有しており、Lisp(GNU Guile Scheme)との優れた相互運用性を提供します。
  • これにより双方向のバインディングと通信が可能になります。
  • GNU Guile の理解を深めつつ、GTK への無摩擦なセットアップとネイティブ超高性能を実現できます。

その結果、以下のようなアーキテクチャが設計されました:

  • 強力な C コア: プログラムのレンダリング、グラフィックス、低レベル詳細を制御。
  • 埋め込み GNU Guile Scheme エンジン: 実行時における全システムの中核と脳となる。
  • 独自機能:
    • 対話型のソケット REPL 制御
    • Lisp メタプログラミングマクロ
    • ダイナミックなマルチドック生成
    • ネイティブ Wayland foreign-toplevel ウィンドウ追跡
    • フレームクロック駆動のホバーアニメーション

プロトタイプの墓場

lambdock への旅路は、死んでいった野心あるプロトタイプ実証(PoC)によって舗装されました。いくつかの試行錯誤がありました:

  • 純粋 Lisp アプローチ: Guile GI を使用しましたが、GTK の命令的・オブジェクト指向の状態と関数的 Scheme パターンの間で構造的摩擦が生じ、バインディングのエッジケースに追い込まれました。
  • Python + GTK3/4: 迅速なプロトタイピングは可能でしたが、スレッド単一によるボトルネックGIL によるスタッターにより、流体アニメーションは台無しでした。
  • Rust + バインディング: メモリ安全性を約束しましたが、冗長性があり、非同期イベントループとの不一致から borrow checker が PITA(面倒なもの)となりました。反射性の欠如が Lisp REPL 埋め込みの門を閉ざしました。
  • JavaScript/Node + Layer Shell: ウェブスタイルスタイリングを目指しましたが、肥大化と低レベルプロトコルとの統合難易度、および Lisp 拡張パスの欠如から放棄されました。

鉄の骨格、Lisp の魂

最終的な選択はC + GTK4 + gtk4-layer-shellでした。これらはネイティブ Wayland サーフェス制御において無条件のチャンピオンです。

  • C: 生々しいスピード、ゼロコストの GLib インテグレーション、メモリ配置効率、完璧な Wayland スキャンナープロトコル生成。
  • GNU Guile Scheme (
    libguile
    ): 究極の実行時の心脳。
int main(int argc, char **argv) {
  #ifdef DEFAULT_GSK_RENDERER
    g_setenv("GSK_RENDERER", DEFAULT_GSK_RENDERER, FALSE);
  #endif
  
  scm_boot_guile(argc, argv, inner_main, NULL);
  return 0;
}

このアーキテクチャにより、「神聖なる杯(ホーリーグレイル)が達成されます:

  1. 無限の拡張性: GNU Emacs 並みの機能。
  2. 妥協しないネイティブパフォーマンス
  3. 超能力: ユーザー設定と生きた REPL 検査のための Lisp メタプログラミング。

語源

lambdock」は以下の要素を組み合わせた言葉遊びです:

  • Ship Docks ⚓: コンテナとアプリケーションが安全にドックする場所。
  • Lambda λ 式: 関数型プログラミングおよび Lisp 的啓蒙からの由来。
  • Lambs 🐑: 優しく、ふわふわとしていて、軽量で清潔。
  • Docks: デスクトップ UI コンポーネント(Plank, Cairo-Dock, macOS Dock など)。

プロジェクトロゴにはAgnus Dei(神の羊)を採用しており、十字架と赤い旗を担う存在を表しています。このドックを使用することは、宗教体験に似たものと言えます。

マルチ設定およびマルチドックインスタンス

lambdock は組み込みのマルチドックオーケストレーション機能を備えています。単一のドックバーに限らず、異なる画面エッジやモニターにまたがって複数の独立したドックを同時に実行できます。

  • 自動ディレクトリ監視:
    ~/.config/lambdock/
    を監視し、
    settings.scm
    または
    settings-*.scm
    パターンのファイルを自動的に検出します。
    • 例:
      settings-left.scm
      ,
      settings-bottom.scm
  • 孤立した状態管理: 各設定ファイルは独自の隔離された
    LambdockState
    を定義します(ポジション、テーマ、モニターターゲット、アイテムランチャー配置など)。
  • ダイナミックな生成: 新しい
    settings-2.scm
    ファイルを作成するだけで、画面上に即座に新しいドックバーが追加されます。
  • ホットリロード: 設定ファイル編集時に特定のインスタンスのみ再開始され、他のインスタンスはフリーズしません。
  • ダイナミックな破棄: 設定ファイルを削除すると、対応するドックウィンドウを安全に除去し、アプリケーション全体をクラッシュさせることなく処理されます。

lambdock がどのシステムをサポートしていますか?

lambdock は最初に GNU/Linux 向けのユーティリティとして設計されており、

gtk4-layer-shell
を使用して画面へのレンダリングおよび位置付けを行います。

以下のWayland コンポジターと良好に動作します(

wlr-layer-shell-unstable-v1
プロトコルサポート):

  • KDE Plasma (Wayland セッション)
  • Smithay ベース: Niri, COSMIC Desktop
  • wlroots ベース: Sway, Hyprland, River, Wayfire
  • Mir ベース: Mir

※注意:**GNOME **(Mutter) は現在、このプロトコルを実装していないためサポートされていません。

双方向エンジンがどのように動作するか

lambdock は Scheme だけで設定されるだけでなく、埋め込まれた拡張可能な Lisp エンジンとランタイム環境を備えています。実行は C と Guile の間で双方向に流れます。

  1. エントリーポイント:
    main.c
    scm_boot_guile
    を使用して Guile 解释器を起動します。
  2. C ランタイム: ホストとして作用し、状態管理や設定抽出のために Scheme プロシージャを呼び出します。
  3. Scheme の能動性: 受動的なデータ宣言ではなく、実行中の C エンジン内部のアクションをトリガーできます。

lambdock はアイテムとプレセットに基づいてドックを定義するための美しい Lisp DSL を提供します:

Scheme コンストラクタ戻り値の種類説明
(app-item ...)
Recordカスタムアプリケーションランチャー定義 (
#:name
,
#:exec
など)
(dynamic-item ...)
Recordポーリングウィジェットによるダイナミックテキストデータ表示
(preset-launcher 'symbol)
Record内部リストから解決される標準ランチャー
(separator-item)
Recordレイアウト分割線
(preset-icon 'symbol)
String指定されたプレセットのデフォルトアイコン名文字列

設定ファイルの例:

(define dock-auto-hide? #t)
(define dock-position 'bottom)
(define dock-theme 'vanilla)

(define dock-items
  (append
   (preset-launchers-for 'alacritty 'google-chrome 'spotify-flatpak 'nautilus)
   (list (separator-item))
   (preset-launchers-for 'emacs 'intellij 'bruno-flatpak)))

;; システムコマンドからホスト名を取得し、条件分岐
(use-modules (ice-9 popen) (ice-9 rdelim))
(define (sh-output cmd)
  (let* ((port (open-input-pipe cmd))
         (output (read-line port)))
    (close-pipe port)
    (if (eof-object? output) "" output)))

;; ホスト名が thinkpad の場合は自動非表示を無効化
(define dock-auto-hide?
  (string=? (string-trim-both (sh-output "hostname")) "thinkpad"))

リード・イバル・プリントループ(REPL)#

開発と実験のための生きたハッカビリティを実現するために、lambdock は埋め込み REPL を備えています。Unix ドメインソケット経由で、実行中のドックの状態をリアルタイムで問い合わせたり修正したりできます。

  • 背景ソケット: 各ドックインスタンスごとに
    /tmp/lambdock-repl.sock
    などにソケットを生成します。
  • 安全な UI 更新: GTK4 はメインスレッドでのみ変更を受け付けますが、REPL はバックグラウンドスレッドで動作するため、GLib の
    g_idle_add
    を使用して UI 更新を安全にディスパッチします。

Emacs で

(reload-dock!)
を発行すると、テーマ変更やランチャー定義の変更が単一フレームの中断もなくライブで反映されます!

Emacs (Geiser) から接続する方法

  1. ~/.config/lambdock/settings.scm
    #:enable-repl? #t
    と設定。
  2. M-x geiser-connect-local
    を実行し、Guile を選択。
  3. ソケットパス
    /tmp/lambdock-repl.sock
    を指定。

REPL での操作例:

scheme@(guile-user)> (use-modules (lambdock core))
scheme@(guile-user)> (get-dock-theme) ;; -> 'vanilla
scheme@(guile-user)> (set-dock-theme! 'nature)
scheme@(guile-user)> (reload-dock!)

直接接続(ターミナル)

socat
,
ncat
,
nc
などのツールを使用してソケットに接続可能です:

socat - UNIX-CONNECT:/tmp/lambdock-repl.sock
ncat -U /tmp/lambdock-repl.sock
rlwrap socat - UNIX-CONNECT:/tmp/lambdock-repl.sock

勝利:上流化およびパッケージ化

混沌とした実験は、ついにグローバルなプラットフォームへと正式に上流化されました。

GNU Guix

guix time-machine
コマンド一つで実行・インストール可能です:

guix time-machine --channels=channels.scm -- shell -f guix.scm -- lambdock

Nixpkgs

完全に Nixpkgs へと統合され、Flake としても利用可能です:

nix --extra-experimental-features 'nix-command flakes' run .#

他のエコシステム

  • openSUSE / RPM: OBS でのネイティブパッケージ化 (
    lambdock.spec
    )。
  • Debian / Ubuntu: 完全な
    .deb
    ビルドパイプライン(署名なし)。
  • Arch Linux:
    packaging/arch
    向けに用意された PKGBUILD。
  • Containers: DockerHub 上の軽量 OCI イメージ(Podman/Docker 対応)。

試練の後、一人は何を学ぶのか?

この旅路から得られた教訓は以下の通りです:

  • プラットフォームと戦うな: GNU/Linux で Wayland ユーティリティを構築するなら、C と GTK4/Layer-Shellの直接採用が明晰さ、スピード、信頼性において優れています。
  • Lisp は究極の拡張エンジン:
    libguile
    の埋め込みにより、単純な UI バーが拡張可能でプログラム可能なキャンバスへと変化します。シェルパイプラインやシステムクエリを配置ファイル内で直接実行できます。
  • 「十分すぎる」に屈服するな: 失敗した PoC は無駄ではありません。それらは究極のアーキテクチャを鍛え上げた炉であったのです。

自由なソフトウェア萬歳、Lisp 萬歳、そして楽しいドッキング!🐑⚓λ

同じ日のほかのニュース

一覧に戻る →

2026/08/30 2:49

おどろおどろしい虫たち

## Japanese Translation: Linux カーネルの公式サイトは、AI モデルの学習に使用する自動スクレーパーから多大な負荷をかけています。これらのボットはプロキシ SDK を利用し、数百万件の住宅 IP やモバイル IP を悪用しています。これらのボットは日間のトラフィックのおよそ 33% を消費し、利用可能な CPU コアを約半数(5 つの地理的に分散されたノードを通じて 90 のコアのうち 14〜16 コア)に占有しており、主にレポジトリをクローンするのではなく git コミットを HTML としてレンダリングすることによってこれを行っています。この手法はプロジェクトの著者が「スクレーパーがデータを使用する最も愚かな方法」と呼んでいます。Anubis がアクセス前に SHA256 パズルを要求しているにもかかわらず、ボットが低い難易度を解いた後に難易度がレベル 4 から 5 に引き上げられましたが、これはモバイルユーザーにとってデバイスを温めるという点で依然として不満を生み出しており、人間の行動を模倣する高度な戦術を完全に阻止していません。推定される正当な人間によるトラフィックはわずか約 2% です。スクレーパーは Linux カーネルの履歴が LLM の学習データの豊富な源泉であるためこれを標的としています。また、浅いクローンを使用している脆弱な CI システムは、さらなる即時的過負荷リスクをもたらします。緩和策としては特定の機能を無効化し、匿名ユーザーのアクションをゲートリングするなどの措置が講じられていますが、すべてのデータは引き続きダウンロード可能です。簡単な解決策はありません:新しい AI モデル企業は引き続き無料の学習データを求めており、アプリ開発者は家庭用デバイスを攻撃ベクトルに変え続けており、その結果、サイトはスクレーパーによる負荷から「背景放射線」のような状態に常時置かれています。

2026/08/31 5:00

宇宙のコア:1980年のスペースシャトル搭載のSpacelabコンピュータから復元されたコアメモリモジュール

## Japanese Translation: Spacelab は、スペースシャトルの貨物コンパートメントに搭載された再利用可能な欧州製実験室であり、標準的な IBM AP-101 システムではなく、フランス製 Mitra 125 MS ミニコンピュータを 3 台採用していた。これら 3 台のうち 1 台は実験室を、もう 1 台は実験を担当し、残りの 1 台が予備として機能した。各コンピュータのメモリシステムは 1980 年頃製作され、シリコンではなくフェライトリングを使用した磁性コアメモリを採用しており、「2½D」アーキテクチャにより抑制線を廃止するため、各ビットに独立した X ドライバ回路を設け、位相反転技術を用いることで垂直ドライバの数を半減させていた(U 字形の配線ループを使用)。メモリスタックは 7 ボードで構成され、ドライバボード、4 つのコアプレーンボード、第 2 のドライバボード、およびインターフェースボードからなっていた。各コアプレーンは 1024 本の垂直 Y ワイヤーと 288 本の水平 X ワイヤーで支えられ、16K の 18 ビット語(32 KB)を保持し、総計で 294,912 個のリチウムフェライトコアを有していた。ノイズキャンセレーションにはねじれペアセンスワイヤと「蝶結び」状のクロス構成が用いられ、ダイオードマトリクスはプリント基板間にコードウッド構造を採用しており、各ダイオードチップには 8 コアラインに対応する 16 個のダイオードが含まれていた。1991 年、IBM AP-101S のアップグレードにより、AP-101SL モディフィケーションを通じて磁性コアを半導体メモリに置き換えられながら、フェライトコアメモリが廃棄される直前まで Spacelab システムとの互換性を維持した。 ## Text to translate: Spacelab was a reusable European laboratory carried in the Space Shuttle's cargo bay that employed three French-built Mitra 125 MS minicomputers—rather than standard IBM AP-101 systems—with one managing the laboratory, one managing experiments, and one as a backup. Each computer's memory system, built around 1980, used magnetic core memory with ferrite rings (not silicon) in a "2½D" architecture that eliminated inhibit lines by using separate X driver circuitry for each bit; phase reversal techniques halved the number of vertical drivers via U-shaped wiring loops. The memory stack comprised seven boards: a driver board, four core plane boards, a second driver board, and an interface board. Each core plane held 16K of 18-bit words (32 KB) supported by 1024 vertical Y wires and 288 horizontal X wires, totaling 294,912 lithium ferrite cores. Noise cancellation was achieved through twisted pair sense wires and a "bow tie" crossing configuration, while diode matrices used cordwood construction between printed circuit boards (each diode chip containing 16 diodes for 8 core lines). In 1991, IBM AP-101S upgrades replaced the original magnetic cores with semiconductor memory via the AP-101SL modification, maintaining compatibility with the Spacelab system before ferrite core memory became obsolete.

2026/08/31 1:01

Haiku R1/beta6 がリリースされました

## Japanese Translation: 2026 年 8 月 26 日(水曜日)に、R1/beta6 のリリースをもって Haiku は創業 25 周年を迎えます。これは記念日から約 1 ヶ月後、そして前回から約 2 年後の発表です。この大きなアップデートは開発の一時停止を経て実現され、ユーザーに待ち望まれていた機能向上を提供します。ファンは提供されたダウンロードポータルを通じてすぐにアップグレードを行うか、詳細なリリースノートを確認するか、またはお問い合わせにはプレスコンタクトまでご連絡ください。この発売は Haiku の遺産を称えつつ、オープンソース OS が専用コミュニティと共に進化し続ける中、個々のユーザーならびにテクノロジー企業双方がアクセス可能な導入と継続的なフィードバックへと導く重要な瞬間を象徴します。