diff options
author | Andrew Yu <andrew@andrewyu.org> | 2022-07-26 01:17:29 +0800 |
---|---|---|
committer | Andrew Yu <andrew@andrewyu.org> | 2022-07-26 01:17:29 +0800 |
commit | a519e5320bec2f2df42b7356740e33189dd13d29 (patch) | |
tree | ee4847a608d3d61973622406fba1e8909ba68112 /random | |
parent | 5aadb780755d21be9f1c2050c841a18a2a6ff9b6 (diff) | |
download | www-a519e5320bec2f2df42b7356740e33189dd13d29.tar.gz |
backup public domain
Diffstat (limited to 'random')
-rw-r--r-- | random/eax.txt | 452 | ||||
-rw-r--r-- | random/lispos.html | 597 | ||||
-rw-r--r-- | random/nh.html | 94 |
3 files changed, 1143 insertions, 0 deletions
diff --git a/random/eax.txt b/random/eax.txt new file mode 100644 index 0000000..b4f2cfb --- /dev/null +++ b/random/eax.txt @@ -0,0 +1,452 @@ +; General way to do syscalls: + +mov eax, <syscall number as below> +mov ebx, arg +mov ecx, arg +mov edx, arg +mov esx, arg +mov edi, arg +int 0x80 + +; man 2 <syscall name> will tell you arguments and extra information of +; the syscalls + +; syscall name syscall number +restart_syscall 0 +exit 1 +fork 2 +read 3 +write 4 +open 5 +close 6 +waitpid 7 +creat 8 +link 9 +unlink 10 +execve 11 +chdir 12 +time 13 +mknod 14 +chmod 15 +lchown 16 +break 17 +oldstat 18 +lseek 19 +getpid 20 +mount 21 +umount 22 +setuid 23 +getuid 24 +stime 25 +ptrace 26 +alarm 27 +oldfstat 28 +pause 29 +utime 30 +stty 31 +gtty 32 +access 33 +nice 34 +ftime 35 +sync 36 +kill 37 +rename 38 +mkdir 39 +rmdir 40 +dup 41 +pipe 42 +times 43 +prof 44 +brk 45 +setgid 46 +getgid 47 +signal 48 +geteuid 49 +getegid 50 +acct 51 +umount2 52 +lock 53 +ioctl 54 +fcntl 55 +mpx 56 +setpgid 57 +ulimit 58 +oldolduname 59 +umask 60 +chroot 61 +ustat 62 +dup2 63 +getppid 64 +getpgrp 65 +setsid 66 +sigaction 67 +sgetmask 68 +ssetmask 69 +setreuid 70 +setregid 71 +sigsuspend 72 +sigpending 73 +sethostname 74 +setrlimit 75 +getrlimit 76 +getrusage 77 +gettimeofday 78 +settimeofday 79 +getgroups 80 +setgroups 81 +select 82 +symlink 83 +oldlstat 84 +readlink 85 +uselib 86 +swapon 87 +reboot 88 +readdir 89 +mmap 90 +munmap 91 +truncate 92 +ftruncate 93 +fchmod 94 +fchown 95 +getpriority 96 +setpriority 97 +profil 98 +statfs 99 +fstatfs 100 +ioperm 101 +socketcall 102 +syslog 103 +setitimer 104 +getitimer 105 +stat 106 +lstat 107 +fstat 108 +olduname 109 +iopl 110 +vhangup 111 +idle 112 +vm86old 113 +wait4 114 +swapoff 115 +sysinfo 116 +ipc 117 +fsync 118 +sigreturn 119 +clone 120 +setdomainname 121 +uname 122 +modify_ldt 123 +adjtimex 124 +mprotect 125 +sigprocmask 126 +create_module 127 +init_module 128 +delete_module 129 +get_kernel_syms 130 +quotactl 131 +getpgid 132 +fchdir 133 +bdflush 134 +sysfs 135 +personality 136 +afs_syscall 137 +setfsuid 138 +setfsgid 139 +_llseek 140 +getdents 141 +_newselect 142 +flock 143 +msync 144 +readv 145 +writev 146 +getsid 147 +fdatasync 148 +_sysctl 149 +mlock 150 +munlock 151 +mlockall 152 +munlockall 153 +sched_setparam 154 +sched_getparam 155 +sched_setscheduler 156 +sched_getscheduler 157 +sched_yield 158 +sched_get_priority_max 159 +sched_get_priority_min 160 +sched_rr_get_interval 161 +nanosleep 162 +mremap 163 +setresuid 164 +getresuid 165 +vm86 166 +query_module 167 +poll 168 +nfsservctl 169 +setresgid 170 +getresgid 171 +prctl 172 +rt_sigreturn 173 +rt_sigaction 174 +rt_sigprocmask 175 +rt_sigpending 176 +rt_sigtimedwait 177 +rt_sigqueueinfo 178 +rt_sigsuspend 179 +pread64 180 +pwrite64 181 +chown 182 +getcwd 183 +capget 184 +capset 185 +sigaltstack 186 +sendfile 187 +getpmsg 188 +putpmsg 189 +vfork 190 +ugetrlimit 191 +mmap2 192 +truncate64 193 +ftruncate64 194 +stat64 195 +lstat64 196 +fstat64 197 +lchown32 198 +getuid32 199 +getgid32 200 +geteuid32 201 +getegid32 202 +setreuid32 203 +setregid32 204 +getgroups32 205 +setgroups32 206 +fchown32 207 +setresuid32 208 +getresuid32 209 +setresgid32 210 +getresgid32 211 +chown32 212 +setuid32 213 +setgid32 214 +setfsuid32 215 +setfsgid32 216 +pivot_root 217 +mincore 218 +madvise 219 +getdents64 220 +fcntl64 221 +gettid 224 +readahead 225 +setxattr 226 +lsetxattr 227 +fsetxattr 228 +getxattr 229 +lgetxattr 230 +fgetxattr 231 +listxattr 232 +llistxattr 233 +flistxattr 234 +removexattr 235 +lremovexattr 236 +fremovexattr 237 +tkill 238 +sendfile64 239 +futex 240 +sched_setaffinity 241 +sched_getaffinity 242 +set_thread_area 243 +get_thread_area 244 +io_setup 245 +io_destroy 246 +io_getevents 247 +io_submit 248 +io_cancel 249 +fadvise64 250 +exit_group 252 +lookup_dcookie 253 +epoll_create 254 +epoll_ctl 255 +epoll_wait 256 +remap_file_pages 257 +set_tid_address 258 +timer_create 259 +timer_settime 260 +timer_gettime 261 +timer_getoverrun 262 +timer_delete 263 +clock_settime 264 +clock_gettime 265 +clock_getres 266 +clock_nanosleep 267 +statfs64 268 +fstatfs64 269 +tgkill 270 +utimes 271 +fadvise64_64 272 +vserver 273 +mbind 274 +get_mempolicy 275 +set_mempolicy 276 +mq_open 277 +mq_unlink 278 +mq_timedsend 279 +mq_timedreceive 280 +mq_notify 281 +mq_getsetattr 282 +kexec_load 283 +waitid 284 +add_key 286 +request_key 287 +keyctl 288 +ioprio_set 289 +ioprio_get 290 +inotify_init 291 +inotify_add_watch 292 +inotify_rm_watch 293 +migrate_pages 294 +openat 295 +mkdirat 296 +mknodat 297 +fchownat 298 +futimesat 299 +fstatat64 300 +unlinkat 301 +renameat 302 +linkat 303 +symlinkat 304 +readlinkat 305 +fchmodat 306 +faccessat 307 +pselect6 308 +ppoll 309 +unshare 310 +set_robust_list 311 +get_robust_list 312 +splice 313 +sync_file_range 314 +tee 315 +vmsplice 316 +move_pages 317 +getcpu 318 +epoll_pwait 319 +utimensat 320 +signalfd 321 +timerfd_create 322 +eventfd 323 +fallocate 324 +timerfd_settime 325 +timerfd_gettime 326 +signalfd4 327 +eventfd2 328 +epoll_create1 329 +dup3 330 +pipe2 331 +inotify_init1 332 +preadv 333 +pwritev 334 +rt_tgsigqueueinfo 335 +perf_event_open 336 +recvmmsg 337 +fanotify_init 338 +fanotify_mark 339 +prlimit64 340 +name_to_handle_at 341 +open_by_handle_at 342 +clock_adjtime 343 +syncfs 344 +sendmmsg 345 +setns 346 +process_vm_readv 347 +process_vm_writev 348 +kcmp 349 +finit_module 350 +sched_setattr 351 +sched_getattr 352 +renameat2 353 +seccomp 354 +getrandom 355 +memfd_create 356 +bpf 357 +execveat 358 +socket 359 +socketpair 360 +bind 361 +connect 362 +listen 363 +accept4 364 +getsockopt 365 +setsockopt 366 +getsockname 367 +getpeername 368 +sendto 369 +sendmsg 370 +recvfrom 371 +recvmsg 372 +shutdown 373 +userfaultfd 374 +membarrier 375 +mlock2 376 +copy_file_range 377 +preadv2 378 +pwritev2 379 +pkey_mprotect 380 +pkey_alloc 381 +pkey_free 382 +statx 383 +arch_prctl 384 +io_pgetevents 385 +rseq 386 +semget 393 +semctl 394 +shmget 395 +shmctl 396 +shmat 397 +shmdt 398 +msgget 399 +msgsnd 400 +msgrcv 401 +msgctl 402 +clock_gettime64 403 +clock_settime64 404 +clock_adjtime64 405 +clock_getres_time64 406 +clock_nanosleep_time64 407 +timer_gettime64 408 +timer_settime64 409 +timerfd_gettime64 410 +timerfd_settime64 411 +utimensat_time64 412 +pselect6_time64 413 +ppoll_time64 414 +io_pgetevents_time64 416 +recvmmsg_time64 417 +mq_timedsend_time64 418 +mq_timedreceive_time64 419 +semtimedop_time64 420 +rt_sigtimedwait_time64 421 +futex_time64 422 +sched_rr_get_interval_time64 423 +pidfd_send_signal 424 +io_uring_setup 425 +io_uring_enter 426 +io_uring_register 427 +open_tree 428 +move_mount 429 +fsopen 430 +fsconfig 431 +fsmount 432 +fspick 433 +pidfd_open 434 +clone3 435 +close_range 436 +openat2 437 +pidfd_getfd 438 +faccessat2 439 +process_madvise 440 +epoll_pwait2 441 +mount_setattr 442 +quotactl_fd 443 +landlock_create_ruleset 444 +landlock_add_rule 445 +landlock_restrict_self 446 +memfd_secret 447 +process_mrelease 448 diff --git a/random/lispos.html b/random/lispos.html new file mode 100644 index 0000000..cd114fa --- /dev/null +++ b/random/lispos.html @@ -0,0 +1,597 @@ +<HTML> +<HEAD> +<TITLE>Lisp Operating System</TITLE> +<LINK rel="stylesheet" type="text/css" href="../mm.css"> +</HEAD> +<BODY> +<H1>Lisp Operating System</H1> + +<p> + A Lisp Operating System (LispOS for short) is not just another + operating system that happens to be written in Lisp (although that + would be a good thing in itself). A LispOS is also an operating + system that uses the Lisp interactive environment as an inspiration + for the interface between the user and the system, and between + applications and the system. +</p> + +<p> + Below, we give some ideas on what a LispOS might contain, how it + would be different from existing operating systems, and how such a + system might be created. +</p> + +<H2>The problem with existing systems</H2> + +<H3>The concept of a <i>process</i></H3> + +<p> + Most popular existing operating systems are derived from Unix which + was written in the 1970s. The computers for which Unix was intended + has a very small address space; too small for most usable end-user + applications. To solve this problem, the creators of Unix used the + concept of a <i>process</i>. A large application was written so + that it consisted of several smaller programs, each of which ran in + its own address space. These smaller programs would communicate by + having one application write text to its output stream for another + application to read. This method of communication was called + a <i>pipe</i> and a sequence of small applications was called + a <i>pipeline</i>. As a typical example of a chain of applications, + consider the pipeline for producing a typeset document (one of the + main applications for which Unix was designed). This chain had a + program for creating tables (called <tt>tbl</tt>), a program for + generating pictures (called <tt>pic</tt>), a program for generating + equations (called <tt>eqn</tt>), and of course the typesetting program + itself (called <tt>troff</tt>). +</p> + +<p> + Using pipes to communicate between different components of an + application has several disadvantages: + <ul> + <li> + To communicate complex data structures (such as trees or + graphs), they must be converted to a stream of bytes by the + creating component, and it must be analyzed and parsed into an + equivalent data structure by the using component. Not only is + this unparsing/parsing inefficient in terms of computing + resources, but it is also problematic from a + software-engineering point of view, because the external format + must be specified and maintained as a separate aspect of each + component. + </li> + <li> + An artificial <i>order</i> between the different components is + imposed, so that components can not work as libraries that other + components can use in any order. Sometimes (as in the example + of the <tt>troff</tt> chain) the end result of a computation + depends in subtle ways on the order between the components of + the chain. Introducing a new component may require other + components to be modified. + </li> + </ul> +</p> + +<p> + It is an interesting observation that in most text books on + operating systems, the concept of a process is presented as playing + a central role in operating-system design, whereas it ought to be + presented as an unfortunate necessity due to the limited address + space of existing minicomputers in the 1970s. It is also presented + as <i>the</i> method for obtaining some kind of <i>security</i>, + preventing one application from intentionally or accidentally + modifying the data of some other application. In reality, there are + several ways of obtaining such security, and separate address spaces + should be considered to be a method with too many disadvantages. +</p> + +<p> + Nowadays, computers have addresses that are 64 bit wide, making it + possible to address almost 20 exabytes of data. To get an idea of + the order of magnitude of such a number, consider a fairly large + disc that can hold a terabyte of data. Then 20 million such discs + can be directly addressed by the processor. We can thus consider + the problem of too small an address space to be solved. +</p> + +<H3>Hierarchical file systems</H3> + +<p> + Existing operating system come with a <i>hierarchical file + system</i>. There are two significant problems, + namely <i>hierarchical</i> and <i>file</i>. +</p> + +<p> + The <i> hierarchy</i> is also a concept that dates back to the + 1970s, and it was considered a vast improvement on flat file + systems. However, + as <a href="http://www.shirky.com/writings/ontology_overrated.html">this + article</a> clearly explains, most things are not naturally + hierarchical. A hierarchical organization imposes an artificial + order between names. Whether a document is called + Lisp/Programs/2013/stuff, Programs/Lisp/2013/stuff, + 2013/Programs/Lisp/stuff, etc, is usually not important. +</p> + +<p> + The problem with a <i>file</i> is that it is only a sequence of + bytes with no structure. This lack of structure fits the Unix pipe + model very well, because intermediate steps between individual + software components can be saved to a file without changing the + result. But it also means that in order for complex data structures + to be stored in the file system, they have to be transformed into a + sequence of bytes. And whenever such a structure needs to be + modified by some application, it must again be parsed and + transformed into an in-memory structure. +</p> + +<H3>Distinction between primary and secondary memory</H3> + +<p> + Current system (at least for desktop computers) make a very clear + distinction between primary and secondary memory. Not only are the + two not the same, but they also have totally different semantics: + <ul> + <li> Primary memory is <i>volatile</i>. When power is turned off, + whatever was in primary memory is lost. + </li> + <li> Secondary memory is <i>permanent</i>. Stored data will not + disappear when power is turned off. + </ul> + This distinction coupled with the semantics of the two memories + creates a permanent conundrum for the user of most applications, in + that if current application data is <i>not</i> saved, then it will + be lost in case of power loss, and if it <i>is</i> saved, then + previously saved data is forever lost. +</p> + +<p> + Techniques were developed as early in the 1960s for presenting + primary and secondary memory as a single abstraction to the user. + For example, the Multics system had a single hierarchy of fixed-size + byte arrays (called segments) that served as permanent storage, but + that could also be treated as any in-memory array by applications. + As operating systems derived from Unix became widespread, these + techniques were largely forgotten. +</p> + +<H3>The concept of a kernel</H3> + +<p> + The <i>kernel</i> of an operating system is a fairly large, + monolithic program that is started when the computer is powered on. + The kernel is not an ordinary program of the computer. It executes + in a privileged state so that it has direct access to devices and to + data structures that must be protected from direct use by user-level + programs. +</p> + +<p> + The very existence of a kernel is problematic because the computer + needs to be restarted whenever the kernel is updated, and then all + existing state is lost, including open files and data structures + that reside in volatile memory. Some programs, such as web + browsers, compensate somewhat for this problem by remembering the + open windows and the links that were associated with each window. +</p> + +<p> + The fact that the kernel is monolithic poses a problem because when + code needs to be added to the kernel in the form of <i>a kernel + module</i>, such code has full access to the entire computer + system. This universal access represents a security risk, of + course, but more commonly, it can be <i>defective</i> and then it + will <i>fail</i> often by crashing the entire computer. +</p> + +<p> + We have had solutions to this problem for many decades. The Multics + system, for example, did not have a kernel at all. An interrupt or + a system call was executed by the user-level process that issued the + system call or that happened to be executing when the interrupt + arrived. The code that executed then was not part of a monolithic + kernel, but existed as independent programs that could be added or + replaced without restarting the system. The system could still + crash, of course, if some essential system-wide data structure was + corrupted, but most of the time, only the user-level process that + issued the request would crash. +</p> + +<H3>Monolithic applications</H3> + +<p> + Applications in current operating systems are written in low-level + languages such as C or C++. An application is built using + techniques from more than half a century ago where source code is + compiled to <i>object code</i> and then <i>linked</i> to produce + an <i>executable file</i> meant to run in its own + dedicated <i>address space</i>. +</p> + +<p> + Aside from system calls, all code in an application is run in one + single address space. Together with the fact that low-level + languages are used, this organization makes the application + vulnerable to <i>viruses</i> and other security-related attacks. A + typical attack exploits the vulnerability to <i>buffer overflow</i> + which is due to the fact that the programming language used to write + the application does not insert boundary checks for arrays, + requiring the programmer to do that with explicit code, which is + therefore frequently not done. +</p> + +<p> + A buffer overflow in such an application can be exploited in order + to modify the execution of the program so that code that was not + intended by the application writer is executed in place of the + intended application code. Such modification is possible because + the execution stack is part of the application address space, and + the execution stack contains addresses of code to be executed later, + so that the application has direct access to these code addresses. +</p> + +<p> + In a Lisp operating system, the stack is not accessible to + application code. It is therefore not possible to alter addresses + on the stack representing code to be executed later. Furthermore, + the programming language automatically checks boundaries of arrays, + so that buffer overflows are not possible. +</p> + +<p> + An application in a Lisp operating system is not built as a + monolithic executable meant to execute in its own address space. + Instead, an application consists of a large number of objects whose + addresses are protected by the system and not directly accessible to + application code. The most common techniques for security attacks + are therefore not possible in such a system. +</p> + +<H2>Objectives for a Lisp operating system</H2> + +<p> + The three main objectives of a Lisp operating system correspond to + solutions to the two main problems with exiting systems as indicated + in the previous section. +</p> + +<H3>Single address space</H3> + +<p> + Instead of each application having its own address space, we propose + that all applications share a single large address space. This way, + applications can share data simply by passing pointers around, + because a pointer is globally valid, unlike pointers in current + operating systems. +</p> + +<p> + Clearly, if there is a single address space shared by all + applications, there needs to be a different mechanism to + ensure <i>protection</i> between them so that one application can + not intentionally or accidentally destroy the data of another + application. Most high-level programming languages (in particular + Lisp, but also Java, and many more) propose a solution to this + problem by simply not allowing users to execute arbitrary machine + code. Instead, they allow only code that has been produced from the + high-level notation of the language and which excludes arbitrary + pointer arithmetic so that the application can only address its own + data. This technique is sometimes called "trusted compiler". +</p> + +<p> + It might sometimes be desirable to write an application in a + low-level language like C or even assembler, or it might be + necessary to run applications that have been written for other + systems. Such applications could co-exist with the normal ones, but + they would have to work in their own address space as with current + operating systems, and with the same difficulties of communicating + with other applications. +</p> + +<H3>Object store based on tags</H3> + +<p> + Instead of a hierarchical file system, we propose an <i>object + store</i> which can contain any objects. If a file (i.e. a + sequence of bytes) is desired, it would be stored as an array of + bytes. +</p> + +<p> + Instead of organizing the objects into a hierarchy, objects in the + store can optionally be associated with an arbitrary number + of <i>tags</i>. These tags are <i>key/value</i> pairs, such as for + example the date of creation of the archive entry, the creator (a + user) of the archive entry, and the <i>access permissions</i> for + the entry. Notice that tags are not properties of the objects + themselves, but only of the archive entry that allows an object to + be accessed. Some tags might be derived from the contents of the + object being stored such as the <i>sender</i> or the <i>date</i> of + an email message. It should be possible to accomplish most searches + of the store without accessing the objects themselves, but only the + tags. Occasionally, contents must be accessed such as when a raw + search of the contents of a text is wanted. +</p> + +<p> + It is sometimes desirable to group related objects together as + with <i>directories</i> of current operating systems. Should a user + want such a group, it would simply be another object (say instances + of the class <tt>directory</tt>) in the store. Users who can not + adapt to a non-hierarchical organization can even store such + directories as one of the objects inside another directory. +</p> + +<p>Here are some examples of possible keyword/value pairs, how they + might be used, and what kinds of values are permitted:</p> + +<table border="1"> + <tr> + <td> + Keyword + </td> + <td> + Possible values + </td> + </tr> + <tr> + <td> + <b>category</b> + </td> + <td> + The nature of the object such + as <b>movie</b>, <b>music</b>, <b>article</b>, <b>book</b>, <b>user + manual</b>, <b>dictionary</b>, <b>course</b>, <b>lecture</b>, + <b>recipe</b>, <b>program</b>, <b>bank statement</b>, + <b>email</b>. These would be chosen from an + editable set that is defined per user. + </td> + </tr> + <tr> + <td> + <b>name</b> + </td> + <td> + A string that is displayed with the object, such as "A Dramatic + Turn of Events", "Three seasons", "Alternative energy". + </td> + </tr> + <tr> + <td> + <b>author</b> + </td> + <td> + An object identifying a person, an organization, a company, + etc. + </td> + </tr> + <tr> + <td> + <b>genre</b>. Can be used for movies, music albums, programs, + articles, etc. + </td> + <td> + <b>progressive + metal</b>, <b>science</b>, <b>algorithms</b>, <b>garbage + collection</b>, <b>game</b>, <b>programming language + implementation</b>, <b>operating system</b>. These would be + chosen from an editable set that is defined per user. + </td> + </tr> + <tr> + <td> + <b>format</b> + </td> + <td> + This tag can be used to identify the file type of documents such + as <b>PDF</b>, <b>ogg/vorbis</b>, <b>MPEG4</b> <b>PNG</b>, in + which case the tag can be assigned automatically, but also to + identify the source format of files in a directory containing + things like articles or user manuals, for + example <b>LaTeX</b>, <b>Texinfo</b>, <b>HTML</b>. These would + be chosen from an editable set that is defined per user. + </td> + </tr> + <tr> + <td> + <b>date of creation</b> + </td> + <td> + A date interval. + </td> + </tr> + <tr> + <td> + <b>composer</b>. Used for music. + </td> + <td> + An object representing a person. On a compilation album there + can be more than one tag of this kind. + </td> + </tr> + <tr> + <td> + <b>language</b>. + </td> + <td> + An object representing a natural language such + as <b>English</b>, <b>Vietnamese</b>, or a programming languages + such as <b>Lisp</b>, <b>Python</b>. These would + be chosen from an editable set that is defined per user. If + appropriate, a document can have several of these tags, for + instance if some program uses multiple programming languages, or + if a document is written using several languages, such as a + dictionary. + </td> + </tr> + <tr> + <td> + <b>duration</b>. Can be used for things like movies or music + albums. + </td> + <td> + An object representing a duration. + </td> + </tr> + <tr> + <td> + <b>source control</b>. Can be used for any documents that use + source control such a programs, etc. + </td> + <td> + <b>GIT</b>, <b>SVN</b>, <b>CVS</b>, <b>darks</b>, etc. These + would be chosen from an editable set that is defined per user. + </td> + </tr> + <tr> + </tr> +</table> + +<p> + When (a pointer to) an object is returned to a user as a result of a + search of the object store, it is actually similar to what is called + a "capability" in the operating-system literature. Such a + capability is essentially only a pointer with a few bits indicating + what <i>access rights</i> the user has to the objects. Each creator + may interpret the contents of those bits as he or she likes, but + typically they would be used to restrict access, so that for + instance executing a <i>reader</i> method is allowed, but executing + a <i>writer</i> method is not. +</p> + +<H3>Single memory abstraction</H3> + +<p> + Instead of two different memory abstractions (primary and + secondary), the Lisp operating system would contain a single + abstraction which looks like any interactive Lisp system, except + that data is permanent. +</p> + +<p> + Since data is permanent, application writers are encouraged to + provide a sophisticated <i>undo</i> facility. +</p> + +<p> + The physical main (semiconductor) memory of the computer simply acts + as a <i>cache</i> for the disk(s), so that the address of an object + uniquely determines where on the disk it is stored. The cache is + managed as an ordinary <i>virtual memory</i> with existing + algorithms. +</p> + +<H3>Other features</H3> + +<H4>Crash proof (maybe)</H4> + +<p> + There is extensive work on crash-proof systems, be it operating + systems or data base systems. In our opinion, this work is + confusing in that the objective is not clearly stated. +</p> + +<p> + Sometimes the objective is stated as the desire that no data be lost + when power is lost. But the solution to that problem already exists + in every laptop computer; it simply provides a <i>battery</i> that + allow the system to continue to work, or to be <i>shut down</i> in a + controlled way. +</p> + +<p> + Other times, the objective is stated as a protection against + defective software, so that data is stored at regular intervals + (checkpointing) perhaps combined with a <i>transaction log</i> so + that the state of the system immediately before a crash can always + be recovered. But it is very hard to protect oneself against + defective software. There can be defects in the checkpointing code + or in the code for logging transactions, and there can be defects in + the underlying file system. We believe that it is a better use of + developer time to find and eliminate defects than to aim for a + recovery as a result of existing defects. +</p> + +<H4>Multiple simultaneous environments</H4> + +<p> + To allow for a user to add methods to standard generic functions + (such as <tt>print-object</tt>) without interfering with other + users, we suggest that each user gets a different <i>global + environment</i>. The environment maps <i>names</i> + to <i>objects</i> such as functions, classes, types, packages, and + more. Immutable objects (such as the <tt>common-lisp</tt> package) + can exist in several different environments simultaneously, but + objects (such as the generic function <tt>print-object</tt> would be + different in different environments. +</p> + +<p> + Multiple environments would also provide more safety for users in + that if a user inadvertently removes some system feature, then it + can be recovered from a default environment, and in the worst case a + fresh default environment could be installed for a user who + inadvertently destroyed large parts of his or her environment. +</p> + +<p> + Finally, multiple environments would simplify experimentation with + new features without running the risk of destroying the entire + system. Different versions of a single package could exist in + different environments. +</p> + +<H2>How to accomplish it</H2> + +<p> + The most important aspect of a Lisp operating system is not that all + the code be written in Lisp, but rather to present a Lisp-like + interface between users and the system and between applications and + the system. It is therefore legitimate to take advantage of some + existing system (probably Linux or some BSD version) in order to + provide services such as device drivers, network communication, + thread scheduling, etc. +</p> + +<H3>Create a Lisp system to be used as basis</H3> + +<p> + The first step is to create a Common Lisp system that can be used as + a basis for the Lisp operating system. It should already allow for + multiple environments, and it should be available on 64-bit + platforms. Preferably, this system should use as little C code as + possible and interact directly with the system calls of the + underlying kernel. +</p> + +<H3>Create a single-user system as a Unix process</H3> + +<p> + The next step is to transform the Common Lisp system into an + operating system in the sense of the API for users and + applications. This system would contain the object store, but + perhaps not access control functionality. +</p> + +<p> + When this step is accomplished, it is possible to write or adapt + applications such as text editors, inspectors, debuggers, GUI + interface libraries, etc. for the system. +</p> + +<H3>Create device drivers</H3> + +<p> + The final step is to replace the temporary Unix kernel with native + device drivers for the new system and to turn the system into a full + multi-user operating system. +</p> + +<HR> +<address> +robert.strandh@gmail.com +</address> +</BODY> +</HTML> diff --git a/random/nh.html b/random/nh.html new file mode 100644 index 0000000..652e591 --- /dev/null +++ b/random/nh.html @@ -0,0 +1,94 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" lang="en"> + <head> + <title>New Hampshire's Software Freedom Legislation</title> + <link rel="stylesheet" href="/favor.css" /> + </head> + <body> + <div id="main"> + <h1>Please support the Free Software Movement. The state of New Hampshire may be incorporating software freedom into its law.</h1> + <p>Jan 13, 2022.</p> + <p>This article is incomplete. The original article which I based this off is at <a href="https://libreboot.org/news/usa-libre.html">https://libreboot.org/news/usa-libre.html</a> by Leah Rowe. This article is a "fork" of that article and contains parts of it. Thanks to everybody who contributed to this event and supports software freedom. I'd recommend reading the original one, too.</p> + <div id="majornote"> + <p>For the general public: In this article, I explain what's happening in New Hampshire, why software freedom matters to you and the society in general, and what you could do to help us in this battle.</p> + <p>For supporters of the free software movement: Please read this. As far as I know, this is the first time software freedom as we know it is proposed as a bill for law. Thank you so much.</p> + </div> + <p><a href="https://www.fsf.org/about/what-is-free-software">Free software</a> is software that gives you the user the freedom to share (original or modified), study and modify it. Copyleft is a copyright-based method at preventing people from turning free software into proprietary software.</p> + <p>Since the beginning of the free software movement, we've been advocating for the use of free software. Showing people the freedom (and power) they have in GNU/Linux and the BSDs, many power users replaced nonfree software with free software. Now, at least 90% of servers worldwide run <a href="https://gnu.org">GNU/Linux</a>. My personal one runs <a href="https://OpenBSD.org">OpenBSD</a>.</p> + <p>But ultimately, it's <em>the people</em> who use software. Not every user knows how to fiddle around with computers, not every user can take individual advantage of the freedom to study and change the software. Along with the lack of advertising, we've been alive—but invisible to the public.</p> + <p>The use of proprietary software in government and social activities, especially mandatory tasks, by law or social, such as <a href="https://lists.libreplanet.org/archive/html/libreplanet-discuss/2021-10/msg00011.html">educatioon</a> and medical services, including <a href="https://lists.libreplanet.org/archive/html/libreplanet-discuss/2021-08/msg00008.html">COVID vaccination</a>, and especially <a href="https://www.fsf.org/bulletin/2020/spring/trial-by-proprietary-software">trial in courts with proprietary software</a>, are unjust because by fulfilling these responsibilities, as defined by law, we are giving up essential freedoms, defined but unprotected by law, which can be avoided.</p> + <p>If you live in New Hampshire or in one of the neighbouring states, especially Massachusetts, please listen up! If you are further away and unable to reach New Hampshire all that easily, please spread the following news anyway. It's important. As alien as it may seem to many of the readers, I'm actually writing parts of this article as though someone who has never heard of Free Software is reading it, because I expect precisely that such people <em>will</em> read this particular article.</p> + <div class="h"><h2 id="whats-happening-in-new-hampshire">What's happening in New Hampshire?</h2></div> + <p>An important bill is being proposed in New Hampshire, which would enshrine much of what we know as Free Software <em>into law</em>. Here is the proposed bill, technically named "HB1273":<br /> + <a href="https://gencourt.state.nh.us/bill_status/legacy/bs2016/billText.aspx?sy=2022&id=1363&txtFormat=html" class="uri">https://gencourt.state.nh.us/bill_status/legacy/bs2016/billText.aspx?sy=2022&id=1363&txtFormat=html</a></p> + <p>You can read it for yourself, but here is a paraphrasing of what it proposes:</p> + <ul> + <li><em>Specifically</em> bans state-run websites from serving non-free javascript to clients</li> + <li>Creates a commission to provide oversight, watching the use of Free Software by state agencies</li> + <li>Bans state agencies from using proprietary software - maybe this could include schools, in the future!</li> + <li>If a person is tried in a criminal case, they have the right to audit the source code of any proprietary software that collects evidence against them</li> + <li>Encourages data portability (able to transfer data from one program to another)</li> + <li>Bans certain non-compete clauses and NDAs (non-disclosure agreements) pertaining to Free Software projects</li> + <li>Bans state/local law enforcement from assisting with the enforcement of copyright claims against Free Software projects</li> + <li>Bans state agencies from purchasing non-free software if free software exists, for a given task</li> + </ul> + <p>However, this is only a short summary. You are advised to read the bill in detail. It's not very long.</p> + <p>At first glance, it may not seem that the bill affects individuals, but don't be fooled; this is a hugely positive step forward for everyone! If the state is using Free Software, that most likely means it'll be used in education aswell.</p> + <p>Although perhaps not immediately and readily apparent, this is a stake in the heart of proprietary software's current dominance, because it would remove one key element of its attack against us; its abuse of education services.</p> + <p>If education services are using Free Software, that means they'll probably have children (the ones being educated) using it too. This is a <em>huge</em> step, and it will result in more Free Software developers in the future. Free Software will become more and more mainstream to the masses, which can surely only be a good thing!</p> + <p>Freedom is always superior. The more people that have it, the better off we all are, because freedom is also collective; it relies on others around us also having it, so that we can defend each other. We fought for our rights before, when we founded modern nations—democracies—so that we the people have inalienable rights of our own, our basic human rights, and not to have dictatorships and monarchs who may violate them. Slowly, subtlely, but very effectively, proprietary software is taking away the freedoms we always fought for. What we fought for, for seven centuries, would be gone in the matter of decades. If more people have it, especially if it results in more Free Software developers in the future, that's one thing, but imagine if <em>more</em> states like what they see and start to copy the new legislation.</p> + <p>Now imagine that countries besides the US start doing it, inspired by the US's success (and I think it will be a resounding success).</p> + <p>Imagine a world where <a href="https://www.gnu.org/philosophy/free-sw.html">Free Software</a>, free as in freedom, is the default everywhere. Imagine a world where <a href="https://www.gnu.org/licenses/license-list.html">Free Software licensing</a> is required reading material in schools. <em>Imagine a world where any five year old can install a free operating system such as GNU+Linux, and Computer Science is mandatory in schools from a young age. Imagine filing your tax returns with Free Software, exclusively. Imagine not even thinking about that, because it became the norm.</em></p> + <p><em>Imagine a world where proprietary software doesn't exist, because it is obsolete; entire generations of people are taught to value freedom, and to staunchly defend it, helping each other learn and grow (and produce better software in the process, with less bugs, because people are now free to do that, without relying on some evil company).</em></p> + <p>Imagine a world where you're no longer being spied on because NSA, Apple and Microsoft no longer have backdoor access to your computer. <em>Imagine having the ability to say no, because that's what freedom is. Try to imagine it!</em></p> + <p>Free Software is a revolution that we in the Free Software movement have rigorously upheld and fought for, over many years, but we still face an uphill battle because children are not taught in schools about free computing, nor are they encouraged to learn; they are taught to view computers as <em>products</em> to throw away every 1-2 years, that they can run a few <em>apps</em> on but otherwise are not allowed to do anything with. The <em>concept</em> of a <em>general purpose, fully reprogrammable computer</em> is heavily suppressed in mainstream culture. <em>Most</em> people in the world do not run a free operating system; the idea of a computer being a mere <em>appliance</em> is normalized (as opposed to the idea of it being a highly liberating tool for development and the expansion of human knowledge).</p> + <p><em>This</em> is what we in the Free Software movement have fought for over the years. We believe that knowledge is a human right, that the ability to share, study, learn, adapt and modify the software is an inalienable right that everyone must have. <a href="https://www.gnu.org/philosophy/free-sw.html">The four freedoms are absolute.</a></p> + <p>One of our biggest problem has been simply that schools and governments do not teach people about free computing. The right to learn, the right to read and the right to hack. Our governments are made up of human beings just like you or me, and they can be bought/corrupted; Microsoft, Apple and many others (such as IBM) have done this for years, having the national infrastructures governing us run on their proprietary systems, instead of systems that respect freedom; it is essential that these systems run free software, because a free and democratic society should expect nothing less. Those companies buy influence <em>and they own your politicians</em>.</p> + <p>All of this could change very soon. Something is happening in New Hampshire, which could redefine our movement and give <em>free software</em> real power instead.</p> + <div class="h"><h2 id="how-to-help">HOW TO HELP</h2></div> + <div class="h"><h3 id="testify-in-support-of-the-bill">TESTIFY IN SUPPORT OF THE BILL</h3></div> + <p><strong>The reading of the bill is happening on 11 January 2022. This is when you should go to New Hampshire.</strong></p> + <p><strong>Location of hearing: Legislative Office Building in Concord, New Hampshire:<br /> + <a href="https://en.wikipedia.org/wiki/New_Hampshire_Legislative_Office_Building" class="uri">https://en.wikipedia.org/wiki/New_Hampshire_Legislative_Office_Building</a></strong></p> + <p>The organizer of the proposed bill, <em>Eric Gallager</em>, has left instructions on Twitter. The following is a <em>nitter</em> link, which lets you view the relevant Twitter thread without running non-free Javascript in your browser:<br /> + <a href="https://nitter.net/cooljeanius/status/1479663133207764992" class="uri">https://nitter.net/cooljeanius/status/1479663133207764992</a></p> + <p>The original Twitter URL is:<br /> + <a href="https://twitter.com/cooljeanius/status/1479663133207764992" class="uri">https://twitter.com/cooljeanius/status/1479663133207764992</a></p> + <p>Further instructions for what room to go to, when you get there:<br /> + </p> + <p>See Nitter link:<br /> + <a href="https://nitter.net/cooljeanius/status/1479062316532604930" class="uri">https://nitter.net/cooljeanius/status/1479062316532604930</a></p> + <p>(original twitter link: <a href="https://twitter.com/cooljeanius/status/1479062316532604930" class="uri">https://twitter.com/cooljeanius/status/1479062316532604930</a>)</p> + <p><strong>Please read both threads very carefully!</strong></p> + <p><strong>YOU NEED TO GO TO NEW HAMPSHIRE IN PERSON!</strong></p> + <p>If you're able to go to New Hampshire to attend the reading of the bill, please do so! Voice your support of the bill, and say why you think it's important.</p> + <p>Tell the lawmakers that you demand freedom!</p> + <p>This thread on Twitter is where Eric announced that the reading of the bill is to proceed (original Twitter URL):<br /> + <a href="https://twitter.com/cooljeanius/status/1479555737223413760" class="uri">https://twitter.com/cooljeanius/status/1479555737223413760</a></p> + <div class="h"><h3 id="more-statescountries-will-follow">More states/countries will follow</h3></div> + <p>If this bill is passed in New Hampshire, more states will likely follow. It will lead to a massively renewed drive to liberate all computer users, and US laws tend to be copied/pasted around the world too.</p> + <p>This bill, if passed, will have a hugely positive impact on Free Software at a global level.</p> + <p>You <em>must</em> support this bill. If you want to see it pass, please go to New Hampshire on 11 January 2022 to make sure your voice is heard.</p> + <div class="h"><h3 id="our-enemies-will-be-there">OUR ENEMIES WILL BE THERE</h3></div> + <p>The <em>proprietary</em> software companies like Microsoft and Apple will also be there, trying to argue the case <em>against</em> the use of Free Software.</p> + <p>There is already precedent; please watch this video, which shows how Microsoft (for example) might behave in the reading of the bill. This video is from a discussion within the European Union, several years ago:<br /> + <a href="https://vid.puffyan.us/watch?v=W_S0k1sx8EM" class="uri">https://vid.puffyan.us/watch?v=W_S0k1sx8EM</a> (invidious link. works without javascript enabled, if you wish)</p> + <p>They will try to trick the law makers by claiming things such as:</p> + <ul> + <li><strong>"Free software is insecure / you will get hacked"</strong> - nothing could be further from the truth! Free operating systems such as GNU+Linux, FreeBSD and especially OpenBSD, are among the most secure operating systems available.</li> + <li><strong>"Free software is used by criminal hackers"</strong> - here, they use the term <em>hacker</em> to describe someone who illegally gains access to someone elses computer. Don't fall for it. Maintainers of free operating systems like GNU+Linux distros or the BSDs are actively working to make the internet and computers in general <em>more secure</em></li> + <li><strong>"Software authors deserve to be paid!"</strong> - In fact, many free software devs are <em>paid</em> to work on Free Software! Many companies, including big ones, work on it. There are also hobbyists or otherwise unpaid people, who might work on Free Software for a number of reasons (wanting to make the world a better place, wanting the glory of recognition for solving a major problem, and more often than not, simply because <em>it is fun to do so and you make a lot of friends too!</em>) - No, these companies (e.g. Microsoft) are only arguing in reality for the ability to pay their <em>shareholders</em>, and they control the software exclusively. In fact, free software has repeatedly and consistently over the years <em>defined</em> the computing industry, creating all kinds of new employment opportunities; for example, docker is widely used today and it is free software, used by millions of companies for commercial gain, and the apache web server revolutionized the web back in the day, enabling lots of ISPs to easily host websites - many of the common protocols that we depend upon today, that businesses depend upon (and get paid to maintain or provide services/support for) are in fact free as in freedom!</li> + <li><strong>"Developers should get recognition for their work"</strong> - in free software, you can easily make a name for yourself with relatively few resources except your own computer and an internet connection, plus some cheap hosting. When most developers work on <em>proprietary</em> software such as Windows, they don't get recognition; their copyright is assigned to their employer (e.g. Microsoft) who will take all the credit!</li> + <li><strong>"Free software is unreliable / costly to maintain"</strong> - actually, it has been well known for years that free software is generally more stable and reliable than proprietary. In cases where it isn't, it is quickly improved, and in complete freedom. Free software has a lower cost to maintain and service, and you have a free market where you can choose who you hire to write/maintain it for you (if you won't do that yourself); meanwhile, proprietary software such as Windows is often full of bugs, crashes often and there is only one provider of support most of the time, who will charge a heavy price, while also charging a lot of money for the software itself - free software is <em>free as in freedom</em>, but also usually <em>free as in zero price</em>.</li> + <li><strong>"Free software comes from potentially untrustworthy sources"</strong> - This is pure nonsense, because the very freedoms provided by free software (access to source code, ability to work on it yourself, and see what others did) means that people generally do not add malware to public software sources, because they'd be discovered instantly. <em>Distributions</em> of GNU+Linux and other free operating systems are often maintained by many people, who verify the safety of each software package that they provide; they are also usually provided by each <em>distro</em>, in a central repository unlike with, say, Windows where you really <em>are</em> randomly executing binaries from all kinds of locations (often even without checking the cryptographic checksums of those files, to verify their integrity). It's very hard to become infected with malware on a free system, precisely because security is handled much better; the design of unix-like operating systems in particular is also naturally more secure, due to better separation of root/user privileges.</li> + <li><strong>"Free software isn't controlled, and is unknown."</strong> - this is completely false. These non-free software companies are only talking about <em>their</em> control, and it's quite telling that they completely disregard yours, in this very sentence. In fact, Free Software <em>is</em> controlled, but it's not controlled by some external entity; <em>your</em> installation of free software is controlled by <em>you</em>.</li> + </ul> + <p>If you're familiar with the <em>Matrix</em> films, proprietary operating systems like Windows/MacOS are basically like the Matrix; bland, no individuality, no independent thought, everything tightly controlled. By contrast, free operating systems (such as GNU+Linux distributions or the BSDs) are like zion/io; vibrant, full of life, buzzing with activity, everything loose and free, and everyone is different (a highly diverse culture of people from all walks of life, acting in common cause but nonetheless individuals).</p> + <p>Meanwhile, Windows is known to have backdoors. Microsoft actively informs the NSA about how to exploit them, so that it can break into people's computers and steal private data.</p> + <p>Proprietary software companies are evil, and must be opposed. They know that if this bill passes, their days are numbered.</p> + <p>Defend freedom! Don't listen to any of the arguments against it by proprietary software companies; they don't care about you, and instead only care about profit. They fundamentally do not want you to have any sort of freedom over your own computer, and they actively pursue tactics (such as DRM) to thwart you.</p> + <p>Microsoft and Apple are not your friends. There is no such thing as the Windows community. When you use proprietary systems, you are isolated from everyone around you, and so are they. <em>You</em> are the product, for the non-free software to exploit at the behest of their developers who only care about <em>money</em>.</p> + <p>However, there <em>is</em> such a thing as the Free Software community. It is a vibrant community, consisting of millions of people collectively all over the world, and they are all free to work with each other infinitely. It gave us most of the technology that we take for granted today, including <em>the modern internet, where ISPs run free software almost exclusively!</em></p> + </div> + </body> +</html> |