cli - 統合パッケージマネージャー

(the unified package manager)

Created at: 2021-11-21 02:44:53
Language: TypeScript
License: Apache-2.0

茶

お茶はパッケージマネージャーではありません。

お茶は統一されたパッケージングインフラストラクチャです

醸造の作成者から、お茶はすべての人のためのスタンドアロンのバイナリダウンロードです 全体をオープンにするプラットフォーム あなたの指先でソースエコシステム。さりげなく気軽に最新のものを使う そして、あらゆるスタックのどの層からも最大または最古で最も成熟しています。壊す プログラミングコミュニティ間のサイロをダウンし、スクリプトをまとめて 完全に別々のツールと言語を使用し、それらを世界と共有します シンプルなワンライナー。

必要なのはこれだけです。

tea

 

お茶はV1より前です。これは、日常の使用にまだいくつかの問題がある可能性があることを意味します。 それはまた、あなたが絶対に関与するべきであることを意味します。これが鍵であり、 参加するのは簡単でとても楽しいゴールデンタイムです。私たちは見ています お会いできるのを楽しみにしています👊

 

お茶/CLI 0.13.0

オープンソースは宝の山ですが、それらのチェストは恐ろしい錠で封印されています。 お茶が鍵です:

$ tea +rust-lang.org

tea: installing rust-lang.org and 13 other packages into a temporary sandbox
when done type: exit

tea $ cat <<EOF >hello.rs
fn main() {
  println!("Hello World!");
}
EOF
$ rustc hello.rs -o hello
$ ./hello
Hello World!

tea $ exit

$ rustc
command not found: rustc

お茶はパッケージをインストールしません—少なくとも従来の意味では—私たちはそれらを収納します†。あなたのシステムは手付かずのままで、お茶から隔離されています 活動。しかし、必要なときにすべてがすぐそこにあります。

~/.tea

†最後に、すべてのパッケージが再配置可能なパッケージマネージャー( 彼らはそうあるべきです)。

茶パイプライン

TEAの構文は、オープンソースエコシステム全体をあなたの指先に置きます、 で停止すると、上記が発生します—それらを使用して新しいシェルを開きます 環境内のパッケージですが、入力を続けると直接構築できます 使い:

+pkg
+pkg

$ tea +nodejs.org npx --yes browser-sync start --server
# ^^ one-liner to start a local web server with live reload

$ sh <(curl tea.xyz) +nodejs.org npx --yes browser-sync start --server
# ^^ same one-liner but works for anyone on the Internet
# (if tea is already installed, it uses it, if not it *doesn’t* install tea,
#  a temporary sandbox is created)

すべてを構成し、すべてを組み合わせる—UNIXの哲学のように 想定。これは私たちにつながります-パイプライン:

tea

$ tea +gnu.org/wget wget -qO- tea.xyz/white-paper | tea +charm.sh/glow glow -

特に、構文これはより簡潔に表現できます。

-X

$ tea -X wget -qO- tea.xyz/white-paper | tea -X glow -

その他の例

202xなので、インターネットからスクリプトをダウンロードすることもできます。

$ sh <(curl tea.xyz) +charm.sh/gum https://github.com/charmbracelet/gum/blob/main/examples/demo.sh

最新バージョンのノードを試してみたいが、うまくいくかどうかわからない あなたのプロジェクトで?お茶はそれを簡単にします。

$ tea +nodejs.org^19 npm start

反応アプリを作成するための1つのライナー:

$ sh <(curl tea.xyz) -X npx create-react-app my-app

もうすぐです

茶パイプラインはとても興味深いので、専用のショーケースを用意する予定です。 それら。

 

tea: ユニバーサル通訳者

$ tea https://github.com/teaxyz/demos/blob/main/demo.go input.txt
tea: installing go 1.18.3
go: running demo.go
…

この基本的な例では、ファイルに基づいて最初にインストールすることがわかっています 延長。当たり前ですよね?そのため、私たちはそこで止まりませんでした。

go

$ tea favicon-generator.sh input.png
tea: installing image-magick, optipng, guetzli and 3 other packages…
…
output: favicon-128.png…

$ cat favicon-generator.sh
#!/usr/bin/env tea
#---
# args: [/bin/sh, -e]
# dependencies:
#     imagemagick.org: 4
#     optipng.sourceforge.net: 1
# [snip]…
#---

teaはファイルのYAMLフロントマターを読み取り、ロールインできるようにします スクリプト、要点、ワンライナーのためのオープンソースエコシステム全体。それながら 実行すると、スクリプトはその環境にこれらの依存関係がありますが、残りの あなたのシステムはそれらについて決して知りません。

また、もう少し魔法を知っています。

$ tea -X node
tea: installing node@18.9.1
Welcome to Node.js v18.9.1.
Type ".help" for more information.
>

通常、パッケージの完全修飾名を使用しますが、 彼らが提供するツールなので、あなたが探しているツールを知っている限り、私たちはできます 残りを理解してください。

tea

もうすぐです

---
dependencies:
 nodejs.org: 19
 npmjs.com:
   package.json:
     dependencies:
       react: ^18
---

 

TEA:ユニバーサル仮想環境マネージャー

$ deno
zsh: command not found: deno

$ echo $PATH
/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin

$ cd my-project
$ deno
tea: installing deno.land^1.22
deno 1.27.0
> ^D

$ env
PATH=~/.tea/deno.land/v1.27.0/bin:/usr/bin:/bin
SRCROOT=/src/my-project
VERSION=…
…
このソースは何ですか?

TEAはシェルフックを使用して、プロジェクトに必要な正確なツールを挿入します シェル環境。開発はパッケージマネージャーレベルでコンテナ化されるようになりました。チームのことを心配する必要はもうありません 基本ツールの異なるバージョンを使用していることも、心配する必要はありません システムレベルの更新について あなたが取り組んでいるさまざまなプロジェクトを壊す。

何千ものツール用の何千ものバージョンマネージャーがあります 支える。おそらく、その重複した作業をやめる時が来たのでしょう。

プロジェクトは必要なものを正確に指定でき、それらをインストールできます 要件は、今日、明日、または10年後です。

上記の例では、まだインストールされていない場合は、フックを挿入します。 実行しようとすると、最初にインストールされます。

deno

PSA:ドッカーの使用を停止する

Dockerはデプロイとクロスコンパイルに最適ですが...それに直面しましょう:それ 開発のために吸う。

Dockerはビルダーを窒息させます。 それはあなたを締め付けます。あなたは不順です。テクノロジーは前進しますが、あなたのドッカー コンテナは動かないままです。誰もドッカーの使い方を知りません。それが設定されると、誰もあえてそれに触れません。

Dockerfile

そして、それに直面して、あなたの個人的な開発ツールとデバッグツールを内部で機能させましょう そのイメージは信じられないほどイライラします。なぜあなたの可能性を制限するのですか?

Docker を使用してデプロイを続けますが、開発には tea を使用します。

次に、展開するときに、それらの部門をteaでインストールすることもできます。

率直に言って、teaはシステムパッケージャーとは異なり適切にバージョン管理されているため、teaを使用すると デプロイは実際にはより安定したままです。

ホワイトペーパーを編集するには34の依存関係が必要ですが、お茶には 考えることは何もありません:

$ git clone https://github.com/teaxyz/white-paper
$ cd white-paper
$ make  #
tea: installing pandoc.org and 33 other dependencies…
…
$ open tea.white-paper.pdf

私たちのホワイトペーパーの依存関係は、私たちのプレーンなマークダウンで書かれています。 お茶は、単に足を踏み入れることによって彼らのために仮想環境を設定します ディレクトリ。

README

†macOSでは、システムを再利用するため、最初に行う必要があるかもしれません make(システムにインストールされているDEPを検出しようとします)したがって、傍受できません 呼び出し

tea -S

もうすぐです

  • 完了を自動的にロードおよびアンロードします
  • プロジェクトのパッケージごとのカスタマイズを許可します

 

実行可能マークダウン

マークダウンは(当然のことながら)の標準的なドキュメント形式になりました 発達。コメント付きのスクリプトを書く代わりに、 実行できるドキュメント。

$ tea .  # interprets `# Getting Started`, could also be `tea ./README.md`
tea: npm install
tea: npm start

$ sh <(curl tea.xyz) https://github.com/my/project
tea: cloning…
tea: npm start

$ git clone https://github.com/my/project
$ cd project
$ tea build
tea: executing `# Build`

CIでこれらのスクリプトを使用するのは簡単です。

steps:
  - uses: teaxyz/setup@v0
    with:
      target: build

GitHub アクションでできることすべてについては、teaxyz/setupをチェックしてください。

もうすぐです

これは、実行可能ファイルの概念を探求する最初のステップの限られたセットです 値下げ。全体を作るためのコンセプトを賢明に構築するつもりです 実行可能なドキュメント、そして私たちはあなたの助けをお願いします。 それについての議論を始めてください。

 

はじめ

お茶はスタンドアロンのバイナリなので、必要に応じてダウンロードできます 自分。ただし†もう少し魔法をかけるには、インストーラーをお勧めします。

sh <(curl https://tea.xyz)
# • asks you to confirm before it sets tea up in `~/.tea`
# • asks you to confirm before adding one line to your `~/.shellrc`
# • asks you to confirm before making a `/usr/local/bin/tea` symlink

† Tea の仮想環境マネージャー機能が必要な場合は、インストーラー 最も簡単な方法です。

実際、ティーワンライナーはインストールを抽象化します。

$ sh <(curl tea.xyz) https://example.com/script.ts

# works the same as:
$ tea https://example.com/script.ts

# if tea is installed, our one-liner uses the tea installation, if it’s not
# installed then it **doesn’t install tea** or any dependencies, it creates a
# sandbox and runs everything in there

ブログ投稿、ツイート、チュートリアルでは、開始する必要はありません 「お茶のインストール方法」の前文があれば、グーグルでも何もする必要はありません。 彼らが最初にお茶について学びたいならば、彼らは彼らがいるのと同じURLに行くことができます カーリング。私たちはすでにLinux、macOS、WSLに取り組んでいます。まもなくWindowsをサポートする予定です ネイティブ。

ボーナスとして、インストーラーはお茶も更新します。

今ここを見てください 仲間'、私はインストーラーが嫌いです...

わかりました!私たちはインストーラーが嫌いです。そのため、すべてをパッケージ化しています。 あなたがそれを望まないなら、私たちはそれであなたを完全にサポートします。

インストーラーなしでインストールする

tea
は、自分でインストールできる単一のバイナリです。 必要に応じてバイナリのプレーン/テキストリストの場合 すべてのプラットフォーム用のダウンロード。
curl dist.tea.xyz

macOSでは、おそらくバイナリの検疫を解除する必要があります。

$ xattr -d com.apple.quarantine ./tea

ダウンロード場所から試すことができますが、おそらく それをに移動するか、必要に応じて別のディレクトリに移動します それを「インストール」します。

/usr/local/bin
PATH

今インストールされているあなたはの任意のインスタンスを省略することができます 代わりに、ローカルにインストールされたのコピーを使用してください。

tea
sh <(curl tea.xyz)
tea

私たちの(オプションの)魔法のリストラには、次のフックが必要です。

PATH
~/.zshrc

add-zsh-hook -Uz chpwd(){ source <(tea -Eds) }

このソースが少し多いと思われる場合は、お茶を通訳として使用できます その代わりに。たとえば、あなたのために正しいを実行します 環境。

tea npm start
npm

お茶のアンインストール
  • あなたは下ですべてを削除することができます
    ~/.tea
  • ワンライナーも追加されていますあなたは削除する必要があります。
    ~/.zshrc
  • 最後に削除
    /usr/local/bin/tea

 

環境マネージャーとしての使用

あなたは開発者であり、ツールをグローバルにインストールすることは意味がありません。お茶とは プロジェクトまたはスクリプトごとに必要なツールは、そのワークスペースで仮想環境として使用できます。私たちの魔法は、libcの深さからの高さまで機能します CSSプリコンパイラの最新の流行。すべてのバージョン†。すべてのプラットフォーム‡。

†私たちは新しいソフトウェアです、この約束を達成するための時間を与えてください。
‡ウィンドウズ(ネイティブ、WSLをサポートしています)、ラズベリーパイ、BeOSなどは近日公開予定です!

ターミナルでプロジェクトに入ると、teaは環境を設定するので あなたのツールは「ちょうど機能します」。これを行うには、依存関係テーブルを探します あなたの。

cd
README

を使用するのは奇妙に思えるかもしれませんが、実際には適切な場所です 依存関係を文書化します。通常、オープンソースでは、この情報は かろうじて文書化されている、誤って文書化されている、または複製されている(誤って) さまざまな場所を見つけるのが難しい。もう違います。

README

さらに、これはお茶の使用をオプションにします。チームまたはユーザーは、次のことができます。 必要に応じて、依存関係自体を調達します。それはすぐそこに言います 人間が読める形式彼らが得る必要があるもの。

README

ええと、私はこれが嫌いです、私は別のファイルを使うことができますか?

あなたは使用することができます代わりに:

package.json

{
  "tea": {
    "dependencies": [{ "nodejs.org": 18 }]
  }
}

前にチェックします。あなたはの強制使用することができます魔法を無効にすることによって。

README.md
package.json
package.json
--muggle

例については、「依存関係」セクションを参照してください (ティーセプション:お茶を使ってお茶を作ります)。

これにより生成される環境は、次のように確認できます。

tea

tea --env --dump

--env
TEA がソースに基づいて環境を生成することを指定します。 チェックアウトを制御します。したがって、gitを使用している場合は、ディレクトリとそれを考慮してくださいあなたのプロジェクトのために。次に、環境情報を収集するためにそこを確認します。
.git
SRCROOT
README.md

TEAは、ワークスペースに基づいて環境をさらに強化しようとします 文脈:

変数 形容
VERSION
から抽出
README
SRCROOT
ソース管理マーカーが見つかるまで、ルートに向かって降下します。
.git
MANPATH
あなたの部門のためのソワークス
man …

また、例えば,,, 他のツールがあなたの依存関係を見つけることができるように。他の変数を提供します 便利さも、(あなたから抽出された)ようなものです オートメーションスクリプトには驚くほど便利です。

PKG_CONFIG_PATH
LD_LIBRARY_PATH
DEVELOPER_DIR
GITHUB_SLUG
git remote

これらの変数は、ティースクリプトでも使用できます。

 

通訳者としての利用

tea を使用すると、ほぼすべてのスクリプトを任意の場所から実行できます。私たちは 適切なインタプリタを自動的に魔法のようにインストールします(分離された仮想として 環境:システムにグローバルな影響はありません)。

$ tea my-script.py

teaはファイル拡張子を見るので、最新バージョンのPythonをインストールします スクリプトを実行します。

.py

Pythonのバージョンをより細かく制御したい場合は、編集する必要があります スクリプトのYAMLフロントマター、例えば:

#!/usr/bin/env python

"""
---
dependencies:
  python.org: ^2.7
---
"""

# snip …

teaは、> = 2.7の最新バージョンのPythonでスクリプトを実行しますが、 3.0未満。インストールされていない場合は取得し、それ以外の場合は次のものを使用します 利用できる。

また、次のようなツールに役立つパラメータもサポートしています。 denoやgoのようなコマンドが必要です。

args
env
run

#!/usr/bin/env deno

/*---
dependencies:
  deno.land: ^1.27
args:
  - deno
  - run
  # we put the script filename on the end for you here
env:
  foo: {{srcroot}}/bar
---*/

シバンを使う
tea

あなたはできます、そしてあなたはおそらくお茶ができるのでこれを選ぶでしょう 依存関係をインストールするだけではありません。あなたは私たちの以前の糖尿病を思い出すかもしれません 彼らが得意なことに固執するツール—私たちはこれを本当に信じています。こうして プロジェクト環境に合わせて構成できるようにツールを進化させることは、何かです 私たちは私たちに任せるべきだと考えています。

#!/usr/bin/env tea

たとえば、JavaScriptとTypeScriptの素晴らしいインタプリタです。 しかし、それはあなたがしたいことを意味するプロジェクト構成機能を持っていません あなたが少しいじらなければならないかもしれないスクリプトのためにそれを使用してください。私たちはdenoがすべきだと思います このようにとどまり、代わりにお茶を使うことができます:

deno

#!/usr/bin/env -S tea -E

/* ---
dependencies:
  deno.land: ^1.18
args:
  - deno
  - run
  - --allow-net
  - --import-map={{ srcroot }}/import-map.json
  # ^^ we provide {{srcroot}} which can be enormously useful for scripting
  # note that you must use a `tea -E` shebang for this to work
--- */

// snip …

これは次のようになります:

$ pwd
/src
$ ./script.ts my-arg
tea: ~/.tea/deno.land/v1.18/bin/deno run \
  --allow-net \
  --import-map=/src/import-map.json \
  /src/script.ts \
  my-arg

withteaを呼び出すと、仮想環境を読み取り、 そこからの依存関係。おそらくあなたのプロジェクトはすでにあなたの依存関係を指定しているので、上記のYAMLはおそらく冗長です。

-E
deno

 

魔法

tea
魔法の概念を成文化します。

という環境で 魔法です私たちは賢くなり、あなたが望むものを推測しようとします。魔法がなければ、私たちは 厳格で、意図を正確に指定する必要があります。

あなたは指定することによって魔法を無効にすることができますまたはあなたにエクスポートします シェル環境。

--muggle
MAGIC=0

私たちが適用する主な魔法は、仮想を使用するかどうかを決定することです 環境かどうか。厳密には注入する必要がありますが、 魔法が有効になっています 私たちはあなたがそれを望んでいたかどうかを理解しようとします。私たちの目標は スマートで生産性の向上に役立ちます。

tea --env

依存関係ごとに魔法をかけます。これは現在、tea/cliでハードコードされたロジックです それ自体ですが、パッケージごとにファイルを使用して一般的にする予定です パントリーで。

magic.ts

現在、魔法は限られています(そして貢献するのに最適な場所です)。

たとえば、プロジェクトがGitHubアクションであることを検出した場合、適切なバージョンのノードを使用できるようにします。

action.yml

 

貢献

提案やアイデアがある場合は、ディスカッションを開始します。同意する場合は、 課題に移動します。プルリクエストまたは問題に直接バグ修正してください!

おそらくあなたが始めたいと思う場所は、パントリーを補うことです。

ハッキング
tea

tea
は、deno を使用してタイプスクリプトで記述されています。

git clone https://github.com/teaxyz/cli tea
cd tea

tea run foo       # runs the local checkout passing `foo` as an argument
tea install-self  # deploys the local checkout into your `~/.tea`

必要なもの

  • 本当にもっとテストが必要です!
  • テストカバレッジ情報が必要です
  • 依存関係のためのより多くの魔法、例えば。どのバージョンのノードがあるべきかを知ること 他のバージョンマネージャーに使用されるファイルに基づくenv。
    .node-version

トークン報酬

トークンはまだありませんが、醸造されると、 お茶を作るのを手伝ってくれた人たちのために少し余分なものになりましょう。😶‍🌫️

 

FAQ

どこだ?
tea install

お茶の働きは異なります。「Freetypeをインストールしたい」のではなく、 「フリータイプを使いたい」。

ほら、私たちは馬鹿ではありません。私たちは良いことがあることを知っています 古き良き '東 あなたが必要とするもの。したがって、今のところ、引き続き使用してください。 長期的には、拡張可能なコマンドシステムの計画があります。

brew install
brew install

お茶は包装プリミティブのセットです。まったく新しいものを作ってほしい お茶の上にもの。私たちはあなたの既存のビルドツールにお茶を統合したいと思っています、 最終的には、信頼できるパッケージングデータストアになりたいと考えています(約 それらの1つがあった時?

すぐに来るのはお茶/ cmdです。TEA / CLIは、このリポジトリのフォークをコマンドとして公開します ユーザーは、TEAのパッケージングプリミティブの力を利用して実行し、すべてを実行できます 彼らが想像できること。多分それは書くのはあなたでしょうコマンド?(もしそうなら、何か新しいことをしてみてくださいね?😌

tea install
)

ハックに興味がありますか?

If you really want to put through its paces, you can combine the search magic with your shell’s “command not found” logic, to get automatic lookups.

tea
tea

zsh

function command_not_found_handler {
  tea -X $*
}

bash

The following requires ; sadly macOS ships with v3.2, but provides , and we’ve met very few people who want to use on macs, though I bet you're out there).

bash^4
tea
+gnu.org/bash
bash

function command_not_found_handle {
  tea -X $*
}

fish

function fish_command_not_found
  tea -X $argv
end

How do I find available packages?

We list all packages at tea.xyz. Or . We agree this is not great UX.

open ~/.tea/tea.xyz/var/pantry

What are you doing to my computer?

We install compartmentalized packages to .

~/.tea

We then suggest you add our one-liner to your shell and a symlink for .

.rc
/usr/local/bin/tea

We might not have installed tea, if you used and tea wasn’t already installed, then you we only fetched any packages, including tea, temporarily.

sh <(curl tea.xyz) foo

I thought you were decentralized and web3 and shit

tea is creating new technologies that will change how open source is funded. tea/cli is an essential part of that endeavor and is released prior to our protocol in order to bootstrap our holistic vision.

We don’t subscribe to any particular “web” at tea.xyz, our blockchain component will be an implementation detail that you won’t need to think about (but we think you will want to).

Am I or my employer going to have to pay for open source now?

No. Software is a multi-trillion industry. We only have to skim a little off that to pay the entire open source ecosystem. Check out our white-paper for the deets.

Packaging up tea packages with your , etc.
.app

Our packages are relocatable by default. Just keep the directory structure the same. And ofc. you are licensed to do so. Honestly we think you should absolutely bundle and deploy tea’s prefix with your software. We designed it so that it would be easier for you to do this than anything that has come before.

I have another question

Start a discussion and we’ll get back to you.

 

 

Appendix

Philosophy

  • Be non‑intrusive

    don’t interfere with our users’ systems or habits

  • Be “just works”

    our users have better things to do than fix us

  • Error messages must be excellent

    trust that if it comes to it, our users can fix things provided we give them a helping hand

  • Be intuitive

    being clever is good—but don’t be so clever nobody gets it

  • Resist complexity

    rethink the problem until a simpler solution emerges

  • Be fast

    we are in the way of our users’ real work, don’t make them wait

Troubleshooting

env: tea: No such file or directory

If you got this error message, you need to install tea: .

sh <(curl https://tea.xyz)

vs.
brew

We don’t aim to replace , we see our offerings as somewhat complementary. Still where we have overlapping features:

brew

  • tea doesn’t require you install the Xcode Command Line Tools
  • tea packages are relocatable
  • tea aims to be zippier in all usage
  • tea doesn’t make global changes to your system
  • tea aims to enhance the way you work, rather than impose the way you work
  • tea installs independently for every user on the machine
  • tea is somewhat decentralized and aims to be completely decentralized
  • tea is a tight series of tight, easy-to-understand codebases
  • tea starts building new releases for tools almost immediately
  • tea’s packages are named in a fully-qualified manner
  • tea’s philosophy is user-first and not tea-maintainer-first

 

Tea Scripts

You can execute each of these with where is the name of the section.

tea foo
foo

Test

FIXME
would be nice to be able to specify tests here deno supports but that would require a little massaging.
--filter

export TMPDIR=${TMPDIR:-/tmp}

deno test \
 --allow-net \
 --allow-read \
 --allow-env=SRCROOT,GITHUB_TOKEN,TMPDIR,TEA_PREFIX \
 --allow-run \
 --import-map=$SRCROOT/import-map.json \
 --allow-write="$TMPDIR" \
 --unstable \
 "$SRCROOT"/tests/**/*.test.ts

Typecheck

deno check \
  --import-map="$SRCROOT"/import-map.json \
  --unstable \
  src/app.ts \
  "$SRCROOT"/scripts/*.ts

Run

deno run \
  --import-map="$SRCROOT"/import-map.json \
  --unstable \
  --allow-all \
  "$SRCROOT"/src/app.ts

Compile

OUT="$1"
if test -z "$OUT"; then
  OUT="./tea"
else
  shift
fi

deno compile \
  --allow-read \
  --allow-write \
  --allow-net \
  --allow-run \
  --allow-env \
  --unstable \
  --import-map="$SRCROOT/import-map.json" \
  --output "$OUT" \
  "$@" \
  "$SRCROOT/src/app.ts"

Install Self

Installs this working copy into .

~/.tea/tea.xyz/vx.y.z

tea compile "$TEA_PREFIX/tea.xyz/v$VERSION/bin/tea"
"$SRCROOT"/scripts/repair.ts tea.xyz

依存 関係

プロジェクト バージョン
デノランド ^1.27
tea.xyz ^0

macOS >= 11 ||Linux:glibc >= 23

 

短いダイアトライブ

すべてのプログラミング言語、すべてのビルドシステム、すべてのコンパイラ、Webサーバー、 データベースと電子メールクライアントは、無限の機能を追加することに引き寄せられているようです 複雑さにより、ユーザーはますます多くのことができます。

これはUNIXの哲学に反しています:ツールは1つのことを行うべきであり、 —タイトで集中することで— うまくやってください。 それらが構成可能で柔軟性がある場合は、それらを組み合わせることができます。 パイプで接続して、より大きなものに活用し、 より高性能なツールボックス。インターネットはこのツールボックスで構築されています。

今日、すべてのプログラミング言語 同じライブラリとツールのセットを再実装します。 手入れの行き届いた、成熟したポータブルライブラリは、スタックの上位にあります 複雑さが増しすぎます。 これは新しい言語の思春期を拡張します、 その結果、単一の言語が真に最先端の言語になることさえありません そして、の程度につながります オープンソースエコシステムを脆弱にする重複。 これは、あらゆる場所のすべてのソフトウェアに損害を与えます。

お茶はこの複雑さを取り除き、良いためにいくつかの非常に必要な堅牢性を追加します オープンソースエコシステム全体、より大きなインターネット、そして全世界の ソフトウェアの。