病気休暇のためにちょっと時間ができたので、ここで自論を含め少しだけ、自由を愛するハッカー(いい意味でのハッカー)について、Hackintoshの歩き方を何章かまとめておこうと思います。
I’ve had a bit of time for sick leave, so I’m going to summarize a few chapters of Hackintosh’s walk about freedom-loving hackers (hackers in the good sense of the word) here, including a bit of my own theory.
1.OSの誕生と概要(誤解を恐れず簡単に)
1. The birth of the OS and its overview (briefly, without fear of misunderstanding)
(1)OSの誕生
1964年発表のIBM System/360シリーズに搭載されたOS/360およびDOS/360は世界初の商用オペレーティングシステムとされ、単一のOSシリーズで幅広いモデル(性能、容量、価格帯)と周辺機器を稼働させ、更にハードディスクドライブをサポートし、本格的な(プリエンプティブな)マルチタスクを実現した。「オペレーティングシステム」という用語が一般化したのもOS/360からである。(Wikipedia-ja)
(1) Birth of the OS
OS/360 and DOS/360 on the IBM System/360 series released in 1964 were considered the world’s first commercial operating systems, allowing a wide range of models (performance, capacity, and price range) and peripherals to run on a single OS series, as well as support for hard disk drives and full-scale (preemptive) multitasking. It also supported hard disk drives and enabled full-scale (pre-emptive) multitasking. The term “operating system” became commonplace with OS/360. (Wikipedia-ja)
(2)そもそもBIOS(UEFI)は何なのか?
(2) What are BIOS(UEFI) ? (A really primitive story)
BIOSとはBasic Input/Output Systemの略です。今では基本的なCPUの設定動作、各種ハードウェアの設定を行うところがBIOSです。しかし、CP/Mなどの旧来のBIOSはその名の通りカーネルと一緒に動いていたカーネルの一部とでも言っていいものでした。
まだ、きれいなディスプレイもないころのことです。テレタイプ端末という、一種の自動タイプライタみたいなものが当たり前の、キーボード入力と出力の方法でした。
FDD(フロッピーディスクドライブ)は何とかありましたが8インチのかなり大きなもので、AC24VのACモーターで回すという感じです。
ここで、BIOSの役割は、以下のようなことです。
① テレタイプ端末(人に)文字を1文字印字する
② テレタイプ端末から(人から)のキーを押す1文字を待ち受け打たれた文字を得る
③ FDDのトラック(円周)セクタ(書き込みの場所)から読み込む
④ FDDのトラック(円周)セクタ(書き込みの場所)から読み込む
等
簡単に言えば、IO(今でいうハードウェアの)ファームウェアとドライバみたいな役割を果たしており、カーネルと一体となって動いていたのが始まりと考えています。
BIOS is an abbreviation for Basic Input/Output System. Nowadays, the BIOS is where the basic CPU settings and various hardware settings are performed. However, the old BIOS such as CP/M, as the name implies, was a part of the kernel that ran together with the kernel.
This was a time when there were no pretty displays. Teletype terminals, a kind of automatic typewriter, were the norm for keyboard input and output.
FDDs (floppy disk drives) were somehow available, but they were rather large (8 inches) and used a 24V AC motor to spin the disks.
Here, the role of the BIOS is as follows
(1) Print a single character from the teletype terminal (to a person)
(2) Waits for one character to be pressed from the teletype terminal (by a person) and obtains the character that was typed.
(3) Read from the track (circumference) sector (writing location) of the FDD
(4) Read from the track (circumference) sector (write location) of the FDD
etc.
The ancestors of BIOS worked in unison with the kernel. This is my experience.
●いまのBIOSは実はもうその役目はなく以下のようなUEFIとなっている。
Unified Extensible Firmware Interface(ユニファイド・エクステンシブル・ファームウェア・インタフェース、UEFI)はオペレーティングシステム(OS)とプラットフォームファームウェア(デバイスつまりハードウェア)との間のソフトウェアインタフェース(表面上の橋渡し)を定義する仕様である。
UEFIを採用したSystem BIOSは「UEFI BIOS」と呼ばれ、単に「UEFI」と略されることが多いが、ユーザーがアクセスし設定などを行うGUIはUEFIであっても「BIOS」と呼ばれる事が多い。UEFI BIOSはIBM PC互換機に採用された古いSystem BIOSのよりセキュアな置き換えを意図している[1]。遠隔診断やOSがロードされていない状態での修復なども可能とする[2]。「BIOS(バイオス)」とは異なり、「UEFI」の読みは特に定められていない。
UEFIの元となる EFI (Extensible Firmware Interface) 仕様は元々インテルとヒューレットパッカードによって開発された。2005年、EFI 1.10に基づいてUEFIへと発展した。UEFI仕様は業界団体Unified EFI Forumの下で開発されている。
UEFI自体は単なる「インタフェースの仕様」であるため、特定のプロセッサに依存しない。これまでのBIOSとは異なり、近代的なソフトウェア開発手法を用いることが推奨されており、C言語で実装したものなどが代表的である[3]。(Wikipedia-ja)
●In fact, the current BIOS no longer has that role, but rather the following UEFI.
The Unified Extensible Firmware Interface (UEFI) is a specification that defines a software interface (a bridge on the surface) between the operating system (OS) and the platform firmware (i.e., the device or hardware). UEFI is a specification that defines the software interface (surface bridge) between the operating system (OS) and the platform firmware (device, i.e. hardware).
The System BIOS that adopts UEFI is called “UEFI BIOS” and is often abbreviated as simply “UEFI”, but the GUI that users access and configure is often called “BIOS” even if it is UEFI. The UEFI BIOS is intended to be a more secure replacement for the older System BIOS used in IBM PC-compatibles [1]. The UEFI BIOS is intended to be a more secure replacement for the older System BIOS used in IBM PC-compatibles [1], allowing for remote diagnostics and repair without the OS loaded [2]. Unlike “BIOS”, “UEFI” has no specific reading.
The EFI (Extensible Firmware Interface) specification, which is the basis of UEFI, was originally developed by Intel and Hewlett-Packard, and evolved into UEFI based on EFI 1.10 in 2005. The UEFI specification is being developed under the Unified EFI Forum, an industry group.
The UEFI specification was developed under the auspices of the Unified EFI Forum, an industry group, and is not dependent on a specific processor, as UEFI itself is merely an “interface specification. Unlike conventional BIOS, it is recommended to use modern software development methods, such as those implemented in the C programming language[3]. (Wikipedia-ja)
ちょうど各ファームウェア(GPUカードなどのデバイス上のROM(読み込み用記憶装置やマザーボードのチップROM)に書かれてる自分の識別番号や取り扱い情報等)の情報を調停し(一部セットアップできる)とOS(この場合カーネルといっていいでしょう)の橋渡しをしているようになっています。
じっさいに、電源に関する情報を中心とした情報を、OS(カーネル)に送ります。この情報がACPIのDSDTというものになります。以下がDSDTについてのWikipedia-enです。
コンピュータにおいて、ACPI(Advanced Configuration and Power Interface)は、オペレーティングシステムがコンピュータのハードウェアコンポーネントの検出と設定、使用していないハードウェアコンポーネントのスリープなどの電源管理、プラグアンドプレイやホットスワップなどの自動設定、およびステータス監視を行うために使用できるオープンな標準を提供します。ACPIは1996年12月に初めてリリースされ、Advanced Power Management (APM), the MultiProcessor Specification, the PCI BIOS specification, [1][2] and the Plug and Play BIOS (PnP) Specificationの置き換えを目指している。 [3] 電源管理および設定ポリシーを決定するのにプラットフォーム固有のファームウェアに依存していた以前のBIOS中心のシステムに対して、ACPIによってOS制御下にある電源管理が実現する。 この仕様はOS指向の設定および電源管理 (OSPM) システムにとって中心となっている[4]。ACPIは、デバイスのファームウェア(BIOS、UEFIなど)、コンピュータのハードウェアコンポーネント、オペレーティングシステム間のハードウェア抽象化インタフェースを定義しています[5][6]。
In a computer, the Advanced Configuration and Power Interface (ACPI) provides an open standard that operating systems can use to discover and configure computer hardware components, to perform power management e.g. putting unused hardware components to sleep, to perform auto configuration e.g. Plug and Play and hot swapping, and to perform status monitoring. First released in December 1996, ACPI aims to replace Advanced Power Management (APM), the MultiProcessor Specification, the PCI BIOS specification,[1][2] and the Plug and Play BIOS (PnP) Specification.[3] ACPI brings power management under the control of the operating system, as opposed to the previous BIOS-centric system that relied on platform-specific firmware to determine power management and configuration policies.[4] The specification is central to the Operating System-directed configuration and Power Management (OSPM) system. ACPI defines a hardware abstraction interface between the devices firmware (e.g. BIOS, UEFI), the computer hardware components, and the operating systems.[5][6]
たいへんわかりづらいですね。まずUEFIというのは規格であり、プログラムそのものではありません。UEFIの規格をBIOSというプログラムが守っているという関係です。その中で、EFIパーティションの中のefiという拡張子を持つプログラムが各OS(カーネル)に応じて動き、OS(カーネル)を読み込みACPIのデータを渡すことになります。
そのときにOS(カーネル)に送るのがACPI情報です。これは主に、いろいろなハードウェアについて情報(主に電源情報)を司っている情報となります。これがDSDTなどのACPI情報です。
It is very difficult to understand. First of all, UEFI is a standard, not a program itself, and a program called BIOS protects the UEFI standard. The program with the efi extension in the EFI partition works according to each OS (kernel), reading the OS (kernel) and passing the ACPI data to it.
At that time, the ACPI information is sent to the OS (kernel). The ACPI information is sent to the OS (kernel) at that time, and it mainly contains information about various hardware (mainly power supply information). This is the ACPI information, such as DSDT.
さて、ここに置いて、今のClover/OpenCoreが自作PCをmacOSに見せかける場所(EFIパーティション)ができることになり、またACPI情報を書き換えるということをおこなう方法ができます。以上が、BIOSの基礎的部分です。
Now, we have a configuration with an EFI partition where the current Clover/OpenCore is located. At the same time, you can rewrite the ACPI information and the way to build Kext. These are the basics of BIOS.
(3)カーネルとOSについて
(3) About the kernel and OS
この模式図がわかりやすいです。カーネルはUEFIBIOSからのACPIのデータをうけ起動した後、この図の通り、各ハードウェアにカーネル内のドライバを使い、管理調停しつつ、多数のアプリケーションを動かします。
もともとは、カーネルが特権のあるアドレス領域に居て、ドライバをすべて持っています。このもともとの在り方が、モノリシックカーネルです。
このなかで、もともとカーネルがわにあったドライバの一部機能をアプリ側に移し(その分カーネルが小さくなる)、アプリ通しのメッセージで調停する方法で、うまく管理し動かす方法がマイクロカーネルです。
This schematic diagram is easy to understand. After the kernel receives ACPI data from UEFIBIOS and boots up, it uses drivers in the kernel to manage and control each hardware and run many applications, as shown in this diagram.
Originally, the kernel resided in a privileged address space and held all the drivers. This original way of being is the monolithic kernel.
The microkernel is a way to move some of the functions of the drivers that were originally in the kernel to the application side (making the kernel smaller), and to manage and operate them well by mediating with messages through the application.
モノリシックカーネルからマイクロカーネルへの移行が主導的でしたが。調停のために必要な時間がかかるため、手放しに良いというものではなかったため、WindowsもmacOSも両方のいいとこどりのハイブリットカーネルという方法になっています。
ただ、Linuxはいまのところモノリシックカーネルを通しています。
UNIXの系譜からいえば、macOSはBSD系のハイブリッドカーネルという面白い特徴を持っていると私は思います。
The transition from a monolithic kernel to a microkernel was trend, though. Because of the time required for mediation, it was not a good idea to give it up, so both Windows and macOS have gone the way of a hybrid kernel, which is a good compromise of both.
Linux is currently running on a monolithic kernel.
In terms of UNIX genealogy, I think macOS has an interesting feature of a BSD-style hybrid kernel.
そして、OSというときは、カーネルと基本的なそこで扱うデータ、主にファイルなどを取り扱うアプリ群を含めて言うものとなります。
And when we say “operating system”, we mean the kernel and a group of applications that handle the basic data there, mainly files.
2.OSを独占して権利を特許として利用しないことの優位性
2. the advantage of monopolizing the OS and not using the rights as a patent
OSという仕組み自体を、最初に開発したIBMが特許として申請し、その権利をすべて独占したらどういうことになるでしょうか。
それは、考えるだけで恐ろしいことでしょう。われわれは、今あるネットの自由のすべてに課金され、GAFAMをうわ回る、情報統治に利用されることでしょうから。(ある部分で責任を持つという意味で、お金を取って、未知のバグや、潜在的なネットに対しての脆弱性を取るアップデートを配るのは意味があるでしょう。)
What would happen if IBM, the first company to develop the OS itself, applied for a patent and monopolized all the rights to it?
It would be frightening just to think about it. We would be charged by IBM for all the net freedom we have now, and IBM would have more assets than GAFAM. In addition, IBM will be used for information governance. (Though it does make good sense to take money and hand out updates that take care of unknown bugs and potential vulnerabilities to the net, in the sense of being responsible for how it works.)
しかし、この基本的な仕組みを共有財産にしたこと(もっと言えばノイマンの個人特許にしなかったこと)には、あのコミュニズムを嫌うアメリカでさえ、自由のために必要なこととして、OSという財産を共有化しています。ただし、それは、<好き勝手できる>という自由ではありません。些細な意見でも拾い上げ、意味のあることに出会えたら、社会をよりよくできるという意味での自由であると、少なくとも私は考えます。
However, in making this basic mechanism a common property (more specifically, not making it Neumann’s personal patent), even that communism-hating America has shared the property of OS as a necessary thing for freedom. However, it is not the freedom to “do as you please. At least I think it is freedom in the sense of being able to improve society by picking up even the most trivial opinions and encountering meaningful things.
ここで、フリーウェアの意味をきちんと知っておき、パソコンの黎明期に、ハッカーが役割を担ったことを理解しておきたいのです。
Here, we want to make sure that you know exactly what freeware means, and understand the role that hackers played in the early days of personal computers.
自由ソフトウェア(英語: Free software、libre software)[1][2][3]とは、ユーザーがどのような目的に対しても実行することを許可し、また、プログラムについて研究したり、変更したり、それを配布したりする自由も認めることを条件として配布されるコンピュータソフトウェアのことである[4][5][6][7][8]。自由ソフトウェアには、プログラムの対価として支払った価格とは無関係に、ユーザーが(個人で、あるいは、コンピュータプログラマーと協力して)ソフトウェアのコピーを用いて、自身が望むことを(自由ソフトウェアを用いて利益を獲得することを含めて)する自由が存在するということである[9][3]。コンピュータプログラムが自由であるとみなされる必要十分条件は、本質的には(開発者のみではなく)すべてのユーザーに第一にプログラムをコントロールする権利があるということであるとされる。したがって、ユーザーが所有する装置が「自由」であるためには、プログラムによって何が行われるのかを、ユーザーが本質的にはコントロールできなければならない[6][10]。
コンピュータプログラムを研究したり変更したりする権利を保証するためには、ユーザーがプログラムのソースコード(これがプログラムの変更を行うために適した形式である)を読むことが可能である必要がある。このことは「ソースコードにアクセスできる」(access to source code)とか「パブリックに利用できる」(public availability)という言葉で言い表されることがよくあるが、フリーソフトウェア財団は、単純にこのような表現を使ってプログラムを考えることに反対している[11]。その理由として、このような表現を使うと、プログラムのコピーを他者に与えなければならないという義務(義務とは権利とは正反対のものである)がユーザーにある、という印象を与える恐れがあることを挙げている。
free softwareという言葉は、自由ソフトウェアの概念が生まれる以前からゆるく使われていたが[12]、リチャード・ストールマンは、彼がGNUプロジェクトを立ち上げたのと同じ1983年から、この言葉を上記で述べたような意味で使うことを促す自由ソフトウェア運動を開始した。GNUプロジェクトは、自由の精神を尊重したオペレーティングシステムを協力して製作するプロジェクトであり、コンピュータの黎明期にハッカーたちの間に存在していた、互いに協力する精神をよみがえらせることを目的としている[13][14]。(WikiPedia-jp)
Free software is computer software that is distributed on condition that the user has permission to run it for any purpose, and also has the freedom to study the program, modify it, and distribute it. Free software is computer software that is distributed on condition that users have permission to run it for any purpose and also have the freedom to study it, modify it, and distribute it. Free software means that users have the freedom (individually or in cooperation with computer programmers) to use copies of the software to do what they want (including making a profit from it), independently of the price they paid for the program. That is, there is freedom to use copies of the software (in cooperation with computer programmers) to do what one wants (including profiting from free software). The necessary and sufficient condition for a computer program to be considered free is essentially that every user (not just the developer) has the right to control the program in the first place. Thus, in order for a user-owned device to be “free,” the user must essentially be able to control what is done by the program [6][10].
In order to guarantee the right to study and modify a computer program, it must be possible for the user to read the source code of the program (which is the proper format for making changes to the program). This is often expressed in terms of “access to source code” or “public availability,” but the Free Software Foundation is opposed to simply thinking of a program in these terms. 11]. The reason given is that using such an expression may give the impression that the user has an obligation (an obligation being the opposite of a right) to give copies of the program to others.
Although the term “free software” was used loosely before the concept of free software was born,[12] Richard Stallman started the free software movement in 1983, the same year he started the GNU Project, to encourage people to use the term in the sense described above. The GNU Project is a project to collaborate on an operating system that respects the spirit of freedom, with the aim of reviving the spirit of mutual cooperation that existed among hackers in the early days of computers[13][14]. (WikiPedia-jp)
こうやって、フリーに探究するという余地が残された結果、Linuxなどもうまれ、多くのス―パーコンピュータでさえそれを採用していることについて考えてみてください。
As a result of this free room for exploration, Linux was born, and even many supercomputers have adopted it.
いまでは、自由を尊ぶハッカー精神はもう古語となりつつあります。リチャードストールマンは、いまだにアグレッシブなことを言っています。一番彼らが有名になったのは、gccコンパイラコレクションです。C言語はもう古いものではありますが、基礎部分のソフトにとって欠くことができません。その上に、多くのアプリとしての言語実装すら行われているくらいです。
実をいうと、迷走する、新自由主義的資本主義の中、お互いを思いやり、信用し、分担したり、協力したりといったいわゆる<信用>の大切さが見直されています。これは、ハッカー文化を超えて、現代経済理論や民主主義でさえ必要としていることだと思うのです。
Nowadays, the hacker spirit of respecting freedom is becoming an old word. Richard Stallman is still talking about aggressive things. C may be old, but it is an indispensable language for basic software.It is an indispensable language for basic software, and there are even abstract languages being implemented on top of it.
To tell the truth, in the midst of the vagaries of neoliberal capitalism, the importance of “trust” is being reevaluated: caring for each other, trusting, sharing, and cooperating. I think this is something that is needed in modern economic theory and even democracy, beyond hacker culture.
コメント
いつも参考にさせていただいています。
お体ご自愛下さいませ。
ありがとうございます。
みんなが見てくれるようなので、とてもうれしいです。