Monday, August 07, 2017

Facilitated Variation and the Utilization of Reusable Code by Carbon-Based Life

I just finished reading The Plausibility of Life (2005) by Marc W. Kirschner and John C. Gerhart that presents their theory of facilitated variation. The theory of facilitated variation maintains that, although the concepts and mechanisms of Darwin's natural selection are well understood, the mechanisms that brought forth viable biological innovations in the past are a bit wanting in classical Darwinian thought. In classical Darwinian thought, it is proposed that random genetic changes, brought on by random mutations to DNA sequences, can very infrequently cause small incremental enhancements to the survivability of the individual, and thus provide natural selection with something of value to promote in the general gene pool of a species. Again, as frequently cited, most random genetic mutations are either totally inconsequential, or totally fatal in nature, and consequently, are either totally irrelevant to the gene pool of a species or are quickly removed from the gene pool at best. The theory of facilitated variation, like classical Darwinian thought, maintains that the phenotype of an individual is key, and not so much its genotype since natural selection can only operate upon phenotypes. The theory explains that the phenotype of an individual is determined by a number of 'constrained' and 'deconstrained' elements. The constrained elements are called the "conserved core processes" of living things that essentially remain unchanged for billions of years, and which are to be found to be used by all living things to sustain the fundamental functions of carbon-based life, like the generation of proteins by processing the information that is to be found in DNA sequences, and processing it with mRNA, tRNA and ribosomes, or the metabolism of carbohydrates via the Krebs cycle. The deconstrained elements are weakly-linked regulatory processes that can change the amount, location and timing of gene expression within a body, and which, therefore, can easily control which conserved core processes are to be run by a cell and when those conserved core processes are to be run by them. The theory of facilitated variation maintains that most favorable biological innovations arise from minor mutations to the deconstrained weakly-linked regulatory processes that control the conserved core processes of life, rather than from random mutations of the genotype of an individual in general that would change the phenotype of an individual in a purely random direction. That is because the most likely change of direction for the phenotype of an individual, undergoing a random mutation to its genotype, is the death of the individual.

Marc W. Kirschner and John C. Gerhart begin by presenting the fact that simple prokaryotic bacteria, like E. coli, require a full 4,600 genes just to sustain the most rudimentary form of bacterial life, while much more complex multicellular organisms, like human beings, consisting of tens of trillions of cells differentiated into hundreds of differing cell types in the numerous complex organs of a body, require only a mere 22,500 genes to construct. The baffling question is, how is it possible to construct a human being with just under five times the number of genes as a simple single-celled E. coli bacterium? The authors contend that it is only possible for carbon-based life to do so by heavily relying upon reusable code in the genome of complex forms of carbon-based life.

Figure 1 – A simple single- celled E. coli bacterium is constructed using a full 4,600 genes.

Figure 2 – However, a human being, consisting of about 100 trillion cells that are differentiated into the hundreds of differing cell types used to form the organs of the human body, uses a mere 22,500 genes to construct a very complex body, which is just slightly under five times the number of genes used by simple E. coli bacteria to construct a single cell. How is it possible to explain this huge dynamic range of carbon-based life? Marc W. Kirschner and John C. Gerhart maintain that, like complex software, carbon-based life must heavily rely upon reusable code.

For a nice synopsis of the theory of facilitated variation see the authors' paper The theory of facilitated variation at:

http://www.pnas.org/content/104/suppl_1/8582.long

The theory of facilitated variation is an important idea, but since the theory of facilitated variation does not seem to have garnered the attention in the biological community that it justly deserves, I would like to focus on it in this posting. Part of the problem is that it is a relatively new theory that just appeared in 2005, so it has a very long way to go in the normal lifecycle of all new theories:

1. First it is ignored
2. Then it is wrong
3. Then it is obvious
4. Then somebody else thought of it 20 years earlier!

The other problem that the theory of facilitated variation faces is not limited to the theory itself. Rather, it stems from the problem that all such theories in biology must face, namely, that we only have one form of carbon-based life on this planet at our disposal, and we were not around to watch it evolve. That is where softwarephysics can offer some help. From the perspective of softwarephysics, the theory of facilitated variation is most certainly true because we have seen the very same thing arise in the evolution of software over the past 76 years, or 2.4 billion seconds, ever since Konrad Zuse first cranked up his Z3 computer in May of 1941. Again, the value of softwarephysics is that software has been evolving about 100 million times faster than living things for the past 2.4 billion seconds, and all of that evolutionary history occurred within a single human lifetime, with many of the participants still alive today to testify as to what actually had happened, something that those working on the evolution of carbon-based life can only try to imagine. Recall that one of the fundamental findings of softwarephysics is that living things and software are both forms of self-replicating information and that both have converged upon similar solutions to combat the second law of thermodynamics in a highly nonlinear Universe. For more on that see: A Brief History of Self-Replicating Information.

Using the Evolution of Software as a Guide
On the Earth, we have seen carbon-based life go through three major architectural advances, and heavily using the reusable code techniques to be found in the theory of facilitated variation for the past 4 billion years.

1. The origin of life about 4 billion years ago, probably on land in the early hydrothermal fields of the early Earth, producing the prokaryotic cell architecture. See The Bootstrapping Algorithm of Carbon-Based Life.
2. The rise of the complex eukaryotic cell architecture about 2 billion years ago. See The Rise of Complexity in Living Things and Software.
3. The rise of multicellular organisms consisting of millions, or billions, of eukaryotic cells all working together in the Ediacaran about 635 million years ago. See Software Embryogenesis.

The evolutionary history of software on the Earth has converged upon a very similar historical path through Design Space because software also had to battle with the second law of thermodynamics in a highly nonlinear Universe - see The Fundamental Problem of Software for more on that. Software progressed through these similar architectures:

1. The origin of simple unstructured prokaryotic software on Konrad Zuse's Z3 computer in May of 1941 - 2.4 billion seconds ago.
2. The rise of structured eukaryotic software in 1972 - 1.4 billion seconds ago.
3. The rise of object-oriented software (software using multicellular organization) in 1995 - 694 million seconds ago

For more details on the above evolutionary history of software see the SoftwarePaleontology section of SoftwareBiology.

Genetic Material is the Source Code of Carbon-Based Life
Before proceeding with seeing how the historical evolution of reusable code in software lends credence to the theory of facilitated variation for carbon-based life, we need to cover a few basics. We first need to determine what is the software equivalent of genetic material. The genetic material of software is called source code. Like genes strung out along the DNA of chromosomes, source code is a set of instructions that really cannot do anything on its own. The source code has to be first compiled into an executable file, containing the primitive machine instructions for a computer to execute, before it can be run by a computer to do useful things. Once the executable file is loaded into a computer and begins to run, it finally begins to do things and displays its true phenotype. For example, when you double-click on an icon on your desktop, like Microsoft Word, you are loading the Microsoft Word winword.exe executable file into the memory of your computer where it begins to execute under a PID (process ID). For example, after you double-click the Microsoft Word icon on your desktop, you can use CTRL-ALT-DEL to launch the Windows Task Manager, and then click on the Processes tab to find the winword.exe running under a specific PID. This compilation process is very similar to the transcription process used to form proteins by stringing together amino acids in the proper sequence. The output of the DNA transcription process is an executable protein that can begin processing organic molecules the moment it folds up into its usable form and is similar to the executable file that results from compiling the source code of a program.

For living things, of course, the equivalent of source code is the genes stored on stretches of DNA. For living things, in order to do something useful, the information in a gene, or stretch of DNA, has to be first transcribed into a protein because nearly all of the biological functions of carbon-based life are performed by proteins. This transcription process is accomplished by a number of enzymes, proteins that have a catalytic ability to speed up biochemical reactions. The sequence of operations aided by enzymes goes like this:

DNA → mRNA → tRNA → Amino Acid chain → Protein

More specifically, a protein is formed by combining 20 different amino acids into different sequences, and on average it takes about 400 amino acids strung together to form a functional protein. The information to do that is encoded in base pairs running along a strand of DNA. Each base can be in one of four states – A, C, G, or T, and an A will always be found to pair with a T, while a C will always pair with a G. So DNA is really a 2 track tape with one data track and one parity track. For example, if there is an A on the DNA data track, you will find a T on the DNA parity track. This allows not only for the detection of parity errors but also for the correction of parity errors in DNA by enzymes that run up and down the DNA tape looking for parity errors and correcting them.

Figure 3 – DNA is a two-track tape, with one data track and one parity track. This allows not only for the detection of parity errors but also for the correction of parity errors in DNA by enzymes that run up and down the DNA tape looking for parity errors and correcting them.

Now a single base pair can code for 4 different amino acids because a single base pair can be in one of 4 states. Two base pairs can code for 4 x 4 = 16 different amino acids, which is not enough. Three base pairs can code for 4 x 4 x 4 = 64 amino acids which are more than enough to code for 20 different amino acids. So it takes a minimum of three bases to fully encode the 20 different amino acids, leaving 44 combinations left over for redundancy. Biologists call these three base pair combinations a “codon”, but a codon really is just a biological byte composed of three biological bits or base pairs that code for an amino acid. Actually, three of the base pair combinations, or codons, are used as STOP codons – TAA, TAG and TGA which are essentially end- of-file markers designating the end of a gene along the sequential file of DNA. As with magnetic tape, there is a section of “junk” DNA between genes along the DNA 2 track tape. According to Shannon’s equation, a DNA base contains 2 bits of information, so a codon can store 6 bits. For more on this see Some More Information About Information.

Figure 4 – Three bases combine to form a codon, or a biological byte, composed of three biological bits, and encodes the information for one amino acid along the chain of amino acids that form a protein.

The beginning of a gene is denoted by a section of promoter DNA that identifies the beginning of the gene, like the CustomerID field on a record, and the gene is terminated by a STOP codon of TAA, TAG or TGA. Just as there was a 0.50 inch gap of “junk” tape between blocks of records on a magnetic computer tape, there is a section of “junk” DNA between each gene along the 6 feet of DNA tape found within human cells.

Figure 5 - On average, each gene is about 400 codons long and ends in a STOP codon TAA, TAG or TGA which are essentially end-of-file markers designating the end of a gene along the sequential file of DNA. As with magnetic tape, there is a section of “junk” DNA between genes which is shown in grey above.

In order to build a protein, genes are first transcribed to an I/O buffer called mRNA. The 2 track DNA file for a gene is first opened near the promoter of a gene and an enzyme called RNA polymerase then begins to copy the codons or biological bytes along the data track of the DNA tape to an mRNA I/O buffer. The mRNA I/O buffer is then read by a ribosome read/write head as it travels along the mRNA I/O buffer. The ribosome read/write head reads each codon or biological byte of data along the mRNA I/O buffer and writes out a chain of amino acids as tRNA brings in one amino acid after another in the sequence specified by the mRNA I/O buffer.

Figure 6 - In order to build a protein, genes are first transcribed to an I/O buffer called mRNA. The 2 track DNA file for a gene is first opened near the promoter of a gene and an enzyme called RNA polymerase then begins to copy the codons or biological bytes along the data track of the DNA tape to the mRNA I/O buffer. The mRNA I/O buffer is then read by a ribosome read/write head as it travels along the mRNA I/O buffer. The ribosome read/write head reads each codon or biological byte of data along the mRNA I/O buffer and writes out a chain of amino acids as tRNA brings in one amino acid after another in the sequence specified by the mRNA I/O buffer.

The above is a brief synopsis of how simple prokaryotic bacteria and archaea build proteins from the information stored in DNA. The process for eukaryotes is a bit more complex because eukaryotes have genes containing exons and introns. The exons code for the amino acid sequence of a protein, while the introns do not. For more on that and a more detailed comparison of the processing of genes on 2 track DNA and the processing of computer data on 9 track magnetic tapes back in the 1970s and 1980s see: An IT Perspective on the Origin of Chromatin, Chromosomes and Cancer.

Once an amino acid chain has folded up into a 3-D protein molecule, it can then perform one of the functions of life. The total of genes that are used by a particular species is known as the genome of the species, and the specific variations of those genes used by an individual are the genotype of the individual. The specific physical characteristics that those particular genes produce is called the phenotype of the individual. For example, there is a certain variation of a human gene that produces blue eyes and a certain variation that produces brown eyes. If you have two copies of the blue-eyed gene, one from your father and one from your mother, you end up as a phenotype with blue eyes, otherwise, you will end up a brown-eyed phenotype with any other combination of genes.

The Imperative Need for the Use of Reusable Code in the Evolution of Software
It is time to look at some source code. Below are three examples of the source code to compute the average of some numbers that you enter from your keyboard when prompted. The programs are written in the C, C++, and Java programming languages. Please note that modern applications now consist of many thousands to many millions of lines of code. The simple examples below are just for the benefit of our non-IT readers to give them a sense of what is being discussed when I describe the compilation of source code into executable files.


Figure 7 – Source code for a C program that calculates an average of several numbers entered at the keyboard.


Figure 8 – Source code for a C++ program that calculates an average of several numbers entered at the keyboard.


Figure 9 – Source code for a Java program that calculates an average of several numbers entered at the keyboard.

The strange thing is that, although the source code for each of the three small programs above looks somewhat similar, closer inspection shows that they are not identical, yet all three produce exactly the same phenotype when compiled and run. You would not be able to tell which was which by simply running the executable files for the programs because they all have the same phenotype behavior. This is especially strange because the programs are written in three different programming languages! Similarly, you could change the names of the variables "sum" and "count" to "total" and "num_values" in each program, and they would all compile into executables that produced exactly the same phenotype when run. The same is true for the genes of carbon-based life. Figure 10 down below reveals that the translation table of carbon-based life is highly redundant, so that the following codons TTA, TTG, CTT, CTC, CTA and CTG marked in green all code for the same amino acid leucine, and therefore, could be replaced in a gene by any of these six codons without changing the gene at all. Thus there potentially are a huge number of genes that could code for exactly the same protein.

Figure 10 – A closer look at Figure 4 reveals that the translation table of carbon-based life is highly redundant, so that the following codons TTA, TTG, CTT, CTC, CTA and CTG marked in green all code for the same amino acid leucine, and therefore, could be replaced in a gene by any of these six codons without changing the gene at all.

Based upon the above analysis, it would seem that producing useful software source code, or useful DNA genes, should be nearly a slam dunk because there appears to be nearly an infinite number of ways to produce the same useful executable file or the same useful protein from a phenotypic perspective. But for anybody who has ever tried to write software, that is clearly not the case, and by inference, it cannot be the case for genes either. The real problem with both genes and source code comes when you try to make some random substitutions, additions or deletions to an already functioning gene or piece of source code. For example, if you take the source code file for an apparently bug-free program and scramble it with some random substitutions, additions or deletions, the odds are that you will most likely end up with something that no longer works. You end up with a low-information high-entropy mess. That is because the odds of creating an even better version of the program by means of inserting random substitutions, additions or deletions are quite low while turning it into a mess are quite high. There are simply too many ways of messing up the program to win at that game, and the same goes for making random substitutions, additions or deletions for genes as well. This is simply the effects of the second law of thermodynamics in action. The second law of thermodynamics constantly degrades low-entropy useful information into high-entropy useless information - see: The Demon of Software for more on that.

For example, I first started programming software back in 1972 as a physics major at the University of Illinois in Urbana, and this reminds me of an incident from 1973, when I and two other geophysics graduate students at the University of Wisconsin in Madison tried to convert 100 lines of Fortran source code into a Basic program that we could run on our DEC PDP/8e minicomputer. We were trying to convert a 100 line Fortran program for an FFT (Fast Fourier Transform) that we had found listed in a textbook into the Basic programming language that ran on our DEC PDP/8e minicomputer. Since Fortran and Basic were so similar, we figured that converting the program would be a cinch, and we confidently started to punch the program into the teletype machine connected to the DEC PDP/8e minicomputer, using the line editor that came with the minicomputer. We were all novice programmers at the time, each with just one class in Fortran programming under our belts, but back in those days that made us all instant experts in the new science of computer science in the view of our elderly professors. So being rather naïve, we thought this would be a relatively easy task because all we had to do was to translate each line of Fortran source code into a corresponding line of Basic source code. We then eagerly plunged into programming off the top of our heads. However, much to our surprise, our very first Basic FFT program abended on its very first run! I mean all we had to do was to make some slight syntax changes, like asking an Englishman for the location of the nearest petrol station while motoring through the English countryside. Finally, after about 6 hours of intense and very frustrating labor, we finally had our Basic FFT program spitting out the correct answers. That early adventure with computers actually made me long for my old trusty sliderule! You see, that was the very first time I had ever actually tried to get a computer to do something that I really wanted it to do, rather than just completing one of those pesky assignments in my Fortran class at the University of Illinois. I guess that I had mistakenly figured that the programs assigned in my Fortran class were especially tricky because the professor was just trying to winnow out the real losers so that they would not continue on in computer science! I was pretty young back then.

As outlined in The Fundamental Problem of Software, it turns out that we young graduate students, like all IT professionals throughout history, had been fighting the second law of thermodynamics in a highly nonlinear Universe. The second law guarantees that for any valid FFT program, there are nearly an infinite number of matching invalid FFT programs, so the odds are whenever you make a small change to some functioning software source code, in hopes of improving it, you will instead end up with some software that no longer works at all! That is because the Universe is highly nonlinear in nature, so small erroneous changes in computer source code usually produce catastrophic behaviors in the phenotypes of the executable files that they generate - see Software Chaos for more on that. Similarly, the same goes for genes that produce functioning proteins. Small changes to those genes are not likely to produce proteins that are even better at what they do. Instead, small changes to genes will likely produce proteins that are totally nonfunctional, and since the Universe is highly nonlinear in nature, those nonfunctional proteins are likely to be lethal.

Figure 11 – Some graduate students huddled around a DEC PDP-8/e minicomputer entering program source code into the machine. Notice the teletype machines in the foreground on the left. Our machine cost about $30,000 in 1973 dollars ($166,000 in 2017 dollars) and was about the size of a large side-by-side refrigerator, with 32K of magnetic core memory. I just checked, and you can now buy a laptop online with 4 GB of memory (131,072 times as much memory) for $179.99.

So how do you deal with such a quandary when trying to produce innovative computer software or genes? Well, back in 1973 when we finally had a functioning Basic FFT program, we quickly turned it into a Basic subroutine that could be reused by all. It turned out that nearly all of the graduate students in the Geophysics Department at the University of Wisconsin at Madison who were using the DEC PDP/8e minicomputer for their thesis work needed to run FFTs, so this Basic FFT subroutine was soon reused by them all. Of course, we were not the first to discover the IT trick of using reusable code. Anybody who has ever done some serious coding soon discovers the value of building up a personal library of reusable code to draw upon when writing new software. The easiest way to reuse computer source code is to simply "copy/paste" sections of code into the source code that you are working on, but that was not so easy back in the 1950s and 1960s because people were programming on punch cards.

Figure 12 - Each card could hold a maximum of 80 bytes. Normally, one line of code was punched onto each card.

Figure 13 - The cards for a program were held together into a deck with a rubber band, or for very large programs, the deck was held in a special cardboard box that originally housed blank cards. Many times the data cards for a run followed the cards containing the source code for a program. The program was compiled and linked in two steps of the run and then the generated executable file processed the data cards that followed in the deck.

Figure 14 - To run a job, the cards in a deck were fed into a card reader, as shown on the left above, to be compiled, linked, and executed by a million dollar mainframe computer with a clock speed of about 750 KHz and about 1 MB of memory.

Figure 15 - The cards were cut on an IBM 029 keypunch machine, like the one I learned to program Fortran on back in 1972 at the University of Illinois. The IBM 029 keypunch machine did have a way of duplicating a card by feeding the card to be duplicated into the machine, while at the same time, a new blank card was registered in the machine ready for punching, and the information on the first card was then punched on to the second card. This was a very slow and time-consuming way to copy reusable code from one program to another. But there was another machine that could do the same thing for a whole deck of cards all at once, and that machine was much more useful in duplicating existing cards that could then be spliced into the card deck that you were working on.

Take note that the IBM 029 keypunch machine that was used to punch cards did allow you to copy one card at a time, but that was a rather slow way to copy cards for reuse. But there was another machine that could read an entire card deck all at once, and punch out a duplicate card deck of the original in one shot. That machine made it much easier to punch out the cards from an old card deck and splice the copied cards into the card deck that you were working on. Even so, that was a fairly clumsy way of using reusable code, so trying to use reusable code back during the unstructured prokaryotic days of IT prior to 1972 was difficult at best. Also, the chaotic nature of the unstructured prokaryotic "spaghetti code" of the 1950s and 1960s made it difficult to splice in reusable code on cards.

This all changed in the early 1970s with the rise of structured eukaryotic source code that divided functions up amongst a set of subroutines, or organelles, and the arrival of the IBM 3278 terminal and the IBM ISPF screen editor on TSO in the late 1970s that eliminated the need to program on punch cards. One of the chief characteristics of structured programming was the use of "top-down" programming, where programs began execution in a mainline routine that then called many other subroutines. The purpose of the mainline routine was to perform simple high-level logic that called the subordinate subroutines in a fashion that was easy to follow. This structured programming technique made it much easier to maintain and enhance software by simply calling subroutines from the mainline routine in the logical manner required to perform the needed tasks, like assembling Lego building blocks into different patterns that produced an overall new structure. The structured approach to software also made it much easier to reuse software. All that was needed was to create a subroutine library of reusable source code that was already compiled. A mainline program that made calls to the subroutines of the subroutine library was compiled as before. The machine code for the previously compiled subroutines was then added to the resulting executable file by a linkage editor. This made it much easier for structured eukaryotic programs to use reusable code by simply putting the software "conserved core processes" into already compiled subroutine libraries. The ISPF screen editor running under TSO on IBM 3278 terminals also made it much easier to reuse source code because now many lines of source code could be simply copied from one program file to another, with the files stored on disk drives, rather than on punch cards or magnetic tape.

Figure 16 - The IBM ISPF full screen editor ran on IBM 3278 terminals connected to IBM mainframes in the late 1970s. ISPF was also a screen-based interface to TSO (Time Sharing Option) that allowed programmers to do things like copy files and submit batch jobs. ISPF and TSO running on IBM mainframes allowed programmers to easily reuse source code by doing copy/paste operations with the screen editor from one source code file to another. By the way, ISPF and TSO are still used today on IBM mainframe computers and are fine examples of the many "conserved core processes" to be found in software.

The strange thing is that most of the core fundamental processes of computer data processing were developed back in the 1950s, such as sort and merge algorithms, during the unstructured prokaryotic period, but as we have seen they could not be easily reused because of technical difficulties that were not alleviated until the structured eukaryotic period of the early 1970s. Similarly, many of the fundamental "conserved core processes" of carbon-based life were also developed during the first 2.5 billion years of the early Earth by the prokaryotic bacteria and archaea. It became much easier for these "conserved core processes" to be reused when the eukaryotic cell architecture arose about 2 billion years ago.

Figure 17 – The Quicksort algorithm was developed by Tony Hoare in 1959 and applies a prescribed sequence of actions to an input list of unsorted numbers. It very efficiently outputs a sorted list of numbers, no matter what unsorted input it operates upon.

Multicellular Organization and the Major Impact of Reusable Code
But as outlined in the theory of facilitated variation the real impact of reusable code was not fully felt until carbon-based life stumbled upon the revolutionary architecture of multicellular organization, and the same was true in the evolutionary history of software. In software, multicellular organization is obtained through the use of object-oriented programming languages. Some investigation reveals that object-oriented programming has actually been around since 1962, but that it did not catch on at first. In the late 1980s, the use of the very first significant object-oriented programming language, known as C++, started to appear in corporate IT, but object-oriented programming really did not become significant in IT until 1995 when both Java and the Internet Revolution arrived at the same time. The key idea in object-oriented programming is naturally the concept of an object. An object is simply a cell. Object-oriented languages use the concept of a Class, which is a set of instructions for building an object (cell) of a particular cell type in the memory of a computer. Depending upon whom you cite, there are several hundred different cell types in the human body, but in IT we generally use many thousands of cell types or Classes in commercial software. For a brief overview of these concepts go to the webpage below and follow the links by clicking on them.

Lesson: Object-Oriented Programming Concepts
http://docs.oracle.com/javase/tutorial/java/concepts/index.html

A Class defines the data that an object stores in memory and also the methods that operate upon the object data. Remember, an object is simply a cell. Methods are like biochemical pathways that consist of many steps or lines of code. A public method is a biochemical pathway that can be invoked by sending a message to a particular object, like using a ligand molecule secreted from one object to bind to the membrane receptors on another object. This binding of a ligand to a public method of an object can then trigger a cascade of private internal methods within an object or cell.

Figure 18 – A Class contains the instructions for building an object in the memory of a computer and basically defines the cell type of an object. The Class defines the data that an object stores in memory and also the methods that can operate upon the object data.

Figure 19 – Above is an example of a Bicycle object. The Bicycle object has three private data elements - speed in mph, cadence in rpm, and a gear number. These data elements define the state of a Bicycle object. The Bicycle object also has three public methods – changeGears, applyBrakes, and changeCadence that can be used to change the values of the Bicycle object’s internal data elements. Notice that the code in the object methods is highly structured and uses code indentation to clarify the logic.

Figure 20 – Above is some very simple Java code for a Bicycle Class. Real Class files have many data elements and methods and are usually hundreds of lines of code in length.

Figure 21 – Many different objects can be created from a single Class just as many cells can be created from a single cell type. The above List objects are created by instantiating the List Class three times and each List object contains a unique list of numbers. The individual List objects have public methods to insert or remove numbers from the objects and also a private internal sort method that could be called whenever the public insert or remove methods are called. The private internal sort method automatically sorts the numbers in the List object whenever a number is added or removed from the object.

Figure 22 – Objects communicate with each other by sending messages. Really one object calls the exposed public methods of another object and passes some data to the object it calls, like one cell secreting a ligand molecule that then plugs into a membrane receptor on another cell.

Figure 23 – In a growing embryo, the cells communicate with each other by sending out ligand molecules called morphogens, or paracrine factors, that bind to the membrane receptors on other cells.

Figure 24 – Calling a public method of an object can initiate the execution of a cascade of private internal methods within the object. Similarly, when a paracrine factor molecule plugs into a receptor on the surface of a cell, it can initiate a cascade of internal biochemical pathways. In the above figure, an Ag protein plugs into a BCR receptor and initiates a cascade of biochemical pathways or methods within a cell.

When a high-volume corporate website, consisting of many millions of lines of code running on hundreds of servers, starts up and begins taking traffic, billions of objects (cells) begin to be instantiated in the memory of the servers in a manner of minutes and then begin to exchange messages with each other in order to perform the functions of the website. Essentially, when the website boots up, it quickly grows to a mature adult through a period of very rapid embryonic growth and differentiation, as billions of objects are created and differentiated to form the tissues of the website organism. These objects then begin exchanging messages with each other by calling public methods on other objects to invoke cascades of private internal methods which are then executed within the called objects - for more on that see Software Embryogenesis.

Object-Oriented Class Libraries
In addition to implementing a form of multicellular organization in software, the object-oriented programming languages, like C++ and Java, brought with them the concept of a class library. A class library consists of the source code for a large number of reusable Classes for a multitude of objects. For example, for a complete list of the reusable objects in the Java programming language see:

Java Platform, Standard Edition 7
API Specification
https://docs.oracle.com/javase/7/docs/api/

The "All Classes" pane in the lower left of the webpage lists all of the built-in classes of the Java programming language.

Figure 25 – All of the built-in Classes of the Java programming language inherit the data elements and methods of the undifferentiated stem cell Object.

The reusable classes in a class library all inherit the characteristics of the fundamental class Object. An Object object is like a stem cell that can differentiate into a large number of other kinds of objects. Below is a link to the Object Class and all of its reusable methods:

Class Object
https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html

For example, a String object is a particular object type that inherits all of the methods of a general Object stem cell and can perform many operations on the string of characters it contains via the methods of a String object.



Figure 26 – A String object contains a number of characters in a string. A String object inherits all of the general methods of the Object Class, and contains many additional methods, like finding a substring in the characters stored in the String object.

The specifics of a String object can be found at:

Class String
https://docs.oracle.com/javase/7/docs/api/java/lang/String.html

Take a look at the Method Summary of the String class. It contains about 50 reusable code methods that can perform operations on the string of characters in a String object. Back in the unstructured prokaryotic times of the 1950s and 1960s, the source code to perform those operations was repeatedly reprogrammed over and over because there was no easy way to reuse source code in those days. But in the multicellular object-oriented period, the use of extensive class libraries allowed programmers to easily assemble the "conserved core processes" that had been developed back in the unstructured prokaryotic source code of the 1950s and 1960s into complex software by simply instantiating objects and making calls to the methods of the objects that they needed. Thus, the new multicellular object-oriented source code, that created and extended the classes found within the already existing class library, took on more of a regulatory nature than the source code of old. This new multicellular object-oriented source code carried out its required logical operations by simply instantiating certain objects in the class library of reusable code, and then choosing which methods needed to be performed on those objects. Similarly, in the theory of facilitated variation, we find that most of the "conserved core processes" of carbon-based life come from pre-Cambrian times before complex multicellular organisms came to be. For example, the authors point out that 79% of the genes for a mouse come from pre-Cambrian times. So only 21% of the mouse genes, primarily those genes that regulate the expression of the other 79% of the genes from pre-Cambrian times, manage to build a mouse from a finite number of "conserved core processes".

Facilitated Variation is Not a Form of Intelligent Design
While preparing this posting, I noticed on the Internet that some see the theory of facilitated variation as a vindication of the concept of intelligent design, but that is hardly the case. The same misunderstanding can arise from the biological findings of softwarephysics. Some tend to dismiss the biological findings of softwarephysics because software is currently a product of the human mind, while biological life is not a product of intelligent design. Granted, biological life is not a product of intelligent design, but neither is the human mind. The human mind and biological life are both the result of natural processes at work over very long periods of time. This objection simply stems from the fact that we are all still, for the most part, self-deluded Cartesian dualists at heart, with seemingly a little “Me” running around within our heads that just happens to have the ability to write software and to do other challenging things. Thus, most human beings do not think of themselves as part of the natural world. Instead, they think of themselves, and others, as immaterial spirits temporarily haunting a body, and when that body dies the immaterial spirit lives on. In this view, human beings are not part of the natural world. Instead, they are part of the supernatural. But in softwarephysics, we maintain that the human mind is a product of natural processes in action, and so is the software that it produces. For more on that see The Ghost in the Machine the Grand Illusion of Consciousness.

Still, I realize that there might be some hesitation to pursue this line of thought because it might be construed by some as an advocacy of intelligent design, but that is hardly the case. The evolution of software over the past 76 years has essentially been a matter of Darwinian inheritance, innovation and natural selection converging upon similar solutions to that of biological life. For example, it took the IT community about 60 years of trial and error to finally stumble upon an architecture similar to that of complex multicellular life that we call SOA – Service Oriented Architecture. The IT community could have easily discovered SOA back in the 1960s if it had adopted a biological approach to software and intelligently designed software architecture to match that of the biosphere. Instead, the worldwide IT architecture we see today essentially evolved on its own because nobody really sat back and designed this very complex worldwide software architecture; it just sort of evolved on its own through small incremental changes brought on by many millions of independently acting programmers through a process of trial and error. When programmers write code, they always take some old existing code first and then modify it slightly by making a few changes. Then they add a few additional new lines of code and test the modified code to see how far they have come. Usually, the code does not work on the first attempt because of the second law of thermodynamics, so they then try to fix the code and try again. This happens over and over until the programmer finally has a good snippet of new code. Thus, new code comes into existence through the Darwinian mechanisms of inheritance coupled with innovation and natural selection - for more on that see How Software Evolves.

Some might object that this coding process of software is actually a form of intelligent design, but that is not the case. It is important to differentiate between intelligent selection and intelligent design. In softwarephysics we extend the concept of natural selection to include all selection processes that are not supernatural in nature, so for me, intelligent selection is just another form of natural selection. This is really nothing new. Predators and prey constantly make “intelligent” decisions about what to pursue and what to evade, even if those “intelligent” decisions are only made with the benefit of a few interconnected neurons or molecules. So in this view, the selection decisions that a programmer makes after each iteration of working on some new code really are a form of natural selection. After all, programmers are just DNA survival machines with minds infected with memes for writing software, and the selection processes that the human mind undergo while writing software are just as natural as the Sun drying out worms on a sidewalk or a cheetah deciding upon which gazelle in a herd to pursue.

For example, when IT professionals slowly evolved our current $10 trillion worldwide IT architecture over the past 2.4 billion seconds, they certainly did not do so with the teleological intent of creating a simulation of the evolution of the biosphere. Instead, like most organisms in the biosphere, these IT professionals were simply trying to survive just one more day in the frantic world of corporate IT. It is hard to convey the daily mayhem and turmoil of corporate IT to outsiders. When I first hit the floor of Amoco’s IT department back in 1979, I was in total shock, but I quickly realized that all IT jobs essentially boiled down to simply pushing buttons. All you had to do was to push the right buttons, in the right sequence, at the right time, and with zero errors. How hard could that be? Well, it turned out to be very difficult indeed, and in response, I began to subconsciously work on softwarephysics to try to figure out why this job was so hard, and how I could dig myself out of the mess that I had gotten myself into. After a while, it dawned on me that the fundamental problem was the second law of thermodynamics operating in a nonlinear simulated universe. The second law made it very difficult to push the right buttons in the right sequence and at the right time because there were so many erroneous combinations of button pushes. Writing and maintaining software was like looking for a needle in a huge utility phase space. There just were nearly an infinite number of ways of pushing the buttons “wrong”. The other problem was that we were working in a very nonlinear utility phase space, meaning that pushing just one button incorrectly usually brought everything crashing down. Next, I slowly began to think of pushing the correct buttons in the correct sequence as stringing together the correct atoms into the correct sequence to make molecules in chemical reactions that could do things. I also knew that living things were really great at doing that. Living things apparently overcame the second law of thermodynamics by dumping entropy into heat as they built low entropy complex molecules from high entropy simple molecules and atoms. I then began to think of each line of code that I wrote as a step in a biochemical pathway. The variables were like organic molecules composed of characters or “atoms” and the operators were like chemical reactions between the molecules in the line of code. The logic in several lines of code was the same thing as the logic found in several steps of a biochemical pathway, and a complete function was the equivalent of a full-fledged biochemical pathway in itself. For more on that see Some Thoughts on the Origin of Softwarephysics and Its Application Beyond IT and SoftwareChemistry.

Conclusion
The key finding of softwarephysics is that it is all about self-replicating information:

Self-Replicating Information – Information that persists through time by making copies of itself or by enlisting the support of other things to ensure that copies of itself are made.

Basically, we have seen five waves of self-replicating information come to dominate the Earth over the past four billion years:

1. Self-replicating autocatalytic metabolic pathways of organic molecules
2. RNA
3. DNA
4. Memes
5. Software

Software is now rapidly becoming the dominant form of self-replicating information on the planet and is having a major impact on mankind as it comes to predominance. For more on that see: A Brief History of Self-Replicating Information.

So like carbon-based life and software, memes are also forms of self-replicating information that heavily use the concept of reusable code found in the theory of facilitated variation. Many memes are just composites of a number of "conserved core memes" that are patched together by some regulatory memes into something that appears to be unique and can stand on its own. Just watch any romantic comedy, or listen to any political stump speech. For example, about 90% of this posting on reusable code is simply reusable text that I pulled from other softwarephysics postings and patched together in a new sequence using a small amount of new regulatory text. It is just a facilitated variation on a theme, like Johannes Brahms' Variations on a Theme of Paganini (1863):

https://www.youtube.com/watch?v=1EIE78D0m1g&t=1s.

or Rachmaninoff ‘s The Rhapsody on a Theme of Paganini (1934):

https://www.youtube.com/watch?v=HvKTPDg0IW0&t=1s

reusing Paganini's original Caprice no.24 (1817):

https://www.youtube.com/watch?v=PZ307sM0t-0&t=1s.

Comments are welcome at scj333@sbcglobal.net

To see all posts on softwarephysics in reverse order go to:
https://softwarephysics.blogspot.com/

Regards,
Steve Johnston

Saturday, July 15, 2017

The Bootstrapping Algorithm of Carbon-Based Life

The August 2017 issue of Scientific American features a cover story entitled Life Springs that outlines a new explanation for the origin of carbon-based life on this planet that Dave Deamer and Bruce Damer out of the University of California at Santa Cruz have developed in recent years. A few years back, I had some very interesting email exchanges with Bruce Damer regarding using the origin and evolution of software on this planet as a useful analogy for the origin and early evolution of carbon-based life. Now Bruce Damer is one of those fascinating computer geniuses and pioneers that you just never get a chance to meet during the normal course of business during the typical workday in a large corporate IT department, so that was a very exciting change of pace for me. Bruce Damer has a very long and colorful history of working with computers, and he even has his own museum, the DigiBarn Computer Museum, of ancient computers and computer artifacts. For more about Bruce Damer, take a look at his very interesting personal webpage at:

http://www.damer.com/

Bruce Damer received his Ph.D. for his work on the EvoGrid, an attempted computer simulation of the origin of carbon-based life on the Earth. But Bruce Damer's work on the EvoGrid led him to realize that our current computers are just not up to the task, and will probably not have enough computing power to simulate the origin of carbon-based life for the foreseeable future. Since then he has teamed up with the renowned biochemist Dave Deamer who has been working on the origin of carbon-based life since the early 1980s. The basic idea arising from their collaboration is to simply let the untold number of organic molecules to be found in a single thimbleful of solution do the huge number of chemical computations needed to bring forth carbon-based life for us, by setting up a primitive Earth-like chemical environment, and automating the necessary laboratory processes to run a large number of small samples of organic molecules through the simulated primitive-Earth conditions that they think brought forth carbon-based life on this planet. But in order to do that you need an algorithm. A quick check with the Wikipedia tells us:

Algorithm
In mathematics and computer science, an algorithm is a self-contained sequence of actions to be performed. Algorithms can perform calculation, data processing and automated reasoning tasks.

An algorithm is an effective method that can be expressed within a finite amount of space and time and in a well-defined formal language for calculating a function. Starting from an initial state and initial input (perhaps empty), the instructions describe a computation that, when executed, proceeds through a finite number of well-defined successive states, eventually producing "output" and terminating at a final ending state. The transition from one state to the next is not necessarily deterministic; some algorithms, known as randomized algorithms, incorporate random input.


Figure 1 – The Quicksort algorithm was developed by Tony Hoare in 1959 and applies a prescribed sequence of actions to an input list of unsorted numbers. It very efficiently outputs a sorted list of numbers, no matter what unsorted input it operates upon.

Based upon the above, it seems that in order to form a bootstrapping algorithm for the origin of carbon-based life you need to know what organic molecules to start with as input, and what actions to put them through, in order to successfully simulate the origin of carbon-based life on the early Earth as output, and that is the rub. Now figuring out the organic molecules to use is pretty easy because you can easily pick them up at any grocery store. Unfortunately, the ones you find in grocery stores have all been pre-packaged and shrink-wrapped by living things into larger molecules, so you do have to do a little work to bust them up into smaller molecules called monomers - like lipids, amino acids, nucleotides and simple sugars. But the real challenge is trying to figure out the correct processing steps in the bootstrapping algorithm, and that is where some softwarephysics might be of help. Recall that one of the fundamental findings of softwarephysics is that living things and software are both forms of self-replicating information and that both have converged upon similar solutions to combat the second law of thermodynamics in a highly nonlinear Universe. For those working on the origin of carbon-based life, the value of softwarephysics is that software has been evolving about 100 million times faster than living things over the past 76 years, or 2.4 billion seconds, ever since Konrad Zuse first cranked up his Z3 computer in May of 1941, and the evolution of software over that period of time is the only history of a form of self-replicating information that has actually been recorded by human history. In fact, the evolutionary history of software has all occurred within a single human lifetime, and many of those humans are still alive today to testify as to what actually had happened, something that those working on the origin of life on the Earth and its early evolution can only try to imagine. Again, in softwarephysics, we define self-replicating information as:

Self-Replicating Information – Information that persists through time by making copies of itself or by enlisting the support of other things to ensure that copies of itself are made.

The Characteristics of Self-Replicating Information
All forms of self-replicating information have some common characteristics:

1. All self-replicating information evolves over time through the Darwinian processes of inheritance, innovation and natural selection, which endows self-replicating information with one telling characteristic – the ability to survive in a Universe dominated by the second law of thermodynamics and nonlinearity.

2. All self-replicating information begins spontaneously as a parasitic mutation that obtains energy, information and sometimes matter from a host.

3. With time, the parasitic self-replicating information takes on a symbiotic relationship with its host.

4. Eventually, the self-replicating information becomes one with its host through the symbiotic integration of the host and the self-replicating information.

5. Ultimately, the self-replicating information replaces its host as the dominant form of self-replicating information.

6. Most hosts are also forms of self-replicating information.

7. All self-replicating information has to be a little bit nasty in order to survive.

8. The defining characteristic of self-replicating information is the ability of self-replicating information to change the boundary conditions of its utility phase space in new and unpredictable ways by means of exapting current functions into new uses that change the size and shape of its particular utility phase space. See Enablement - the Definitive Characteristic of Living Things for more on this last characteristic.

So far we have seen 5 waves of self-replicating information sweep across the Earth, with each wave greatly reworking the surface and near subsurface of the planet as it came to predominance:

1. Self-replicating autocatalytic metabolic pathways of organic molecules
2. RNA
3. DNA
4. Memes
5. Software

Some object to the idea of memes and software being forms of self-replicating information because currently, both are products of the human mind. But I think that objection stems from the fact that most people simply do not consider themselves to be a part of the natural world. Instead, most people consciously or subconsciously consider themselves to be a supernatural and immaterial spirit that is temporarily haunting a carbon-based body. Now, in order for evolution to take place, we need all three Darwinian processes at work – inheritance, innovation and natural selection. And that is the case for all forms of self-replicating information, including carbon-based life, memes and software. Currently, software is being written and maintained by human programmers, but that will likely change in the next 10 – 50 years when the Software Singularity occurs and AI software will be able to write and maintain software better than a human programmer. Even so, one must realize that human programmers are also just machines with a very complicated and huge neural network of neurons that have been trained with very advanced Deep Learning techniques to code software. Nobody learned how to code software sitting alone in a dark room. All programmers inherited the memes for writing software from teachers, books, other programmers or by looking at the code of others. Also, all forms of selection are "natural" unless they are made by supernatural means. So a programmer pursuing bug-free software by means of trial and error is no different than a cheetah deciding upon which gazelle in a herd to pursue.

Software is now rapidly becoming the dominant form of self-replicating information on the planet and is having a major impact on mankind as it comes to predominance. So we are now living in one of those very rare times when a new form of self-replicating information, in the form of software, is coming to predominance. For biologists, this presents an invaluable opportunity because software has been evolving about 100 million times faster than living things over the past 76 years, or 2.4 billion seconds, ever since Konrad Zuse first cranked up his Z3 computer in May of 1941. And the evolution of software over that period of time is the only history of a form of self-replicating information that has actually been recorded by human history. In fact, the evolutionary history of software has all occurred within a single human lifetime, and many of those humans are still alive today to testify as to what actually had happened, something that those working on the origin of life on the Earth and its early evolution can only try to imagine. For more on that see: A Brief History of Self-Replicating Information.

Getting Started
Above all else, the one thing that any new form of self-replicating information necessarily needs is some kind of copying algorithm, otherwise, it will not be able to self-replicate. For example, we call the copying algorithm that memes use to spread from mind to mind "learning", and we are all familiar with the copy/paste algorithm that is used to copy chunks of software from one file to another, and we have all downloaded software from the Internet and installed it on our computers, sometimes in an unwitting manner that downloads some parasitic malware. Finding a copying algorithm for a new form of self-replicating information might not be so difficult for most new forms of self-replicating information because most new forms of self-replicating information start as a parasitic invader of a host that is also a form of self-replicating information, and most forms of self-replicating information are algorithms. For example, many memes are algorithms, like the meme for properly weaving a basket, or the meme to make a flint flake tool, or the meme to solve a first-order linear differential equation. Similarly, most software also consists mainly of algorithms, and carbon-based life itself can also be viewed as a large collection of biochemical algorithms in play. That means that there must already be some kind of infrastructure in place to support the existence of algorithms for most new forms of self-replicating information trying to get a start. What happens is that the eighth characteristic of self-replicating information comes into play, as a new parasitic form of self-replicating information comes into existence. In order to self-replicate, the new parasitic form of self-replicating information simply exapts an already existing natural algorithm into the new purpose of replicating the new form of self-replicating information. For example, software originally exapted 2400 electomechanical relays, originally meant for switching telephone calls, on board Konrad Zuse's Z3 computer in May of 1941, and it also exapted countless mathematical algorithm memes as well, in order to come into existence. Given the above, it is easy to see how a new form of parasitic self-replicating information can come to be, as it exapts a copying algorithm from an already existing host, but what about the original self-replicating autocatalytic organic molecules? They did not have a self-replicating host to exploit. How did they obtain a copying algorithm?

The Initial Bootstrapping Algorithm
The answer must be that the original self-replicating autocatalytic organic molecules obtained a copying algorithm from a naturally occurring geochemical cycle of some sort. In An IT Perspective on the Transition From Geochemistry to Biochemistry and Beyond we discussed Mike Russell's alkaline hydrothermal vent model which proposes that a naturally occurring pH gradient in alkaline hydrothermal vents arose as alkaline pore fluids containing dissolved hydrogen H2 gas came into contact with acidic seawater that was laden with dissolved carbon dioxide CO2. The alkaline pore fluids were generated by a natural geochemical cycle that was driven by the early convection currents in the Earth's asthenosphere that brought forth plate tectonics. These initial convection currents brought up fresh silicate peridotite rock that was rich in iron and magnesium-bearing minerals, like olivine, to the Earth's initial spreading centers. The serpentinization of the mineral olivine into the mineral serpentinite created alkaline pore fluids and dissolved hydrogen H2 gas, which later created alkaline hydrothermal vents when the alkaline pore fluids came into contact with the acidic seawater containing a great deal of dissolved carbon dioxide CO2. The model proposes that the energy of the resulting pH gradients turned the hydrogen H2 and carbon dioxide CO2 molecules into organic molecules, and it is proposed that they also fueled the origin of life in the pores of the porous hydrothermal vents. Researchers have been trying to replicate this process in the lab for a number of years, but so far they have only been able to produce very dilute solutions of organic molecules, and some contend that what has been produced so far is only what one would expect to find at equilibrium. For example, at equilibrium we have hydrogen H2 and carbon dioxide CO2 at equilibrium with the organic molecule formate HCOOH as:

H2  +  CO2  ↔  HCOOH

But at equilibrium, most of the atoms are on the left side of the equation, with only a very few on the right side as formate HCOOH. Since so far we have only seen very dilute amounts of formate being created by the lab simulations of alkaline hydrothermal vents, it seems likely that pH gradients are not forming them. They probably are just arising from a natural equilibrium reaction. So more work needs to be done in this area to definitively demonstrate that alkaline hydrothermal vents can indeed generate organic molecules and could have been the environment that brought forth carbon-based life.

Now Dave Deamer and Bruce Damer have come up with a different bootstrapping algorithm that also uses a naturally occurring geochemical cycle. For a condensed presentation of Dave Deamer's and Bruce Damer's model see:

In the Beginning: The Origin & Purpose of Life | Dr. Bruce Damer | TEDxSantaCruz
https://www.youtube.com/watch?v=6qiW4aUqtvA

For a more rigorous presentation see their talk at the SETI Institute:

A new model for the origin of life - Bruce Damer and Dave Deamer (SETITalks)
https://www.youtube.com/watch?v=nk_R55O24t4

Below you can download their original paper on the subject. This is a very accessible paper that anyone can easily comprehend, much like Darwin's Origin of Species:

Coupled Phases and Combinatorial Selection in Fluctuating Hydrothermal Pools: A Scenario to Guide Experimental Approaches to the Origin of Cellular Life
https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4390883/#main-content

The paper below by Bruce Damer features the full Terrestrial Origins Hypothesis for the bootstrapping algorithm for the origin of carbon-based life on this planet:

A Field Trip to the Archaean in Search of Darwin’s Warm Little Pond
https://www.mdpi.com/2075-1729/6/2/21

Below are the slides from a presentation they made to the Australasian Astrobiology meeting in Perth, Australia in July of 2016 that you should be able to easily follow once you have reviewed the above material:

An Origin of Life in Salt Water or Fresh Water?
http://www.slideshare.net/bdamer/an-origin-of-life-in-salt-water-or-fresh-water

Figure 2 below is a pictorial depiction of their new bootstrapping algorithm. Basically, their new bootstrapping algorithm calls for organic monomers and polymers that are encased in lipid protocells in hot and very wet freshwater puddles to dry out before becoming wet again. The organic monomers that are the feedstock for this algorithm are to be found in the molecular clouds from which stars are formed, and they end up in the leftovers of forming a solar system. So we now find many organic monomers in the comets of the Oort cloud and the asteroids of the asteroid belt and the Kuiper belt too. The water that is found in carbon-rich chondritic meteorites, that resulted from collisions between asteroids, has a similar Deuterium/Hydrogen ratio as the Earth's seawater. So many now believe that a good portion of the Earth's water supply came from collisions with asteroids early in the Earth's history, and those asteroid collisions would have also brought large amounts of organic monomers along with them. This accumulation of water and organic molecules was enhanced by the Late Heavy Bombardment 3.8 - 4.1 billion years ago. It is thought that the Late Heavy Bombardment was caused by Jupiter and Saturn entering into a 2:1 orbital resonance, with Jupiter making two orbits for every single orbit of Saturn. This meant that the combined gravitational attraction of both Jupiter and Saturn would add up at the same location in the Solar System with each orbit of Saturn. That combined tug perturbed the orbits of Uranus and Neptune, and also the asteroids of the asteroid belt and the Kuiper belt, causing many asteroids to fall into close orbits around the Sun, and eventually to collide with the Earth and the Moon.

Because this bootstrapping algorithm requires that the monomers and polymers of life in protocells be dried out each cycle of the algorithm, this bootstrapping algorithm can only take place above sea level. Consequently, they envision that this bootstrapping algorithm operated on the initial volcanic islands of the early earth about 4 billion years ago. These early volcanic islands would have hydrothermal fields of geysers and pools similar to the ones we find today at Bumpass Hell on Mount Lassen in California and on Mount Mutnovski in Kamchatka, Russia. As the water level in a hydrothermal pool rose and fell, it would form a bathtub ring around the hydrothermal pool, and this bathtub ring would run through the bootstrapping algorithm each time the water level fell and rose again. When the bathtub ring was fully submerged in water, the organic molecules of life would find themselves enclosed in cell-like lipid bilayer vesicles. But as the water in a hydrothermal pool evaporated, it would concentrate the protocells into a gelatinous protocell mat, much like the stromatolitic structures of today and of the distant past. In the gel phase, the protocells would be put under a great deal of stress as they tried to survive in a new and rapidly changing environment. Finally, when the protocell mat totally dried out in the last step of the bootstrapping algorithm, it formed layers of lipids that preserved the surviving organic molecules from the latest iteration of the bootstrapping algorithm. This final drying out step of the bootstrapping algorithm is crucial in building new polymers, as water molecules are chemically removed from between monomer molecules in the lipid laminae to form polymers. When the dried out protocells in the lipid laminae are wetted again in the bootstrapping algorithm, they then bud out into vesicles containing a new mix of polymers to be tested by natural selection once again.

Figure 2 – Dave Deamer's and Bruce Damer's new bootstrapping algorithm requires that a bathtub ring around a hydrothermal pool periodically dries out. The resulting desiccation chemically squeezes out water molecules between monomers, causing them to be glued together into polymers.

You can easily replicate their bootstrapping algorithm while making breakfast. First, make some toast. After you butter the toast, you will find a greasy layer of butter all over your knife that will not wash off when you run the knife under the kitchen faucet. Now run some water over your fingers and then rub them on the bar of soap at your kitchen sink. Next, take your wet soapy fingers and rub them all over the greasy layer of butter on your knife. Now run the knife and your fingers under the kitchen faucet, and make sure you catch everything in a small mixing bowl. Amazingly, your knife will now be totally clean with no residual grease at all when you dry it off! This is because the lipids in the bar of soap have surrounded a huge number of little drops of greasy butter molecules with a lipid membrane called a micelle that has its water-loving heads on the outside. This creates a huge number of little lipid vesicles enclosing greasy butter molecules. That is how soap works. The lipids break the high water surface tension of the polar water molecules, and they create grease cutting micelle vesicles too. Now break a couple of eggs and beat them with a whisk in a small metal mixing bowl for your scrambled eggs. After you finish cooking your scrambled eggs, pour the reserved water, butter and soap mixture into the metal mixing bowl that was used for beating your eggs, which contains a small amount of leftover beaten egg mixture too. Then whisk the contents of the metal mixing bowl and place it on the stove over a very low heat. Now to be fair, we do need to remove the oxygen from the atmosphere of our little breakfast-style simulation of the origin of carbon-based life because the early Earth had an atmosphere composed primarily of nitrogen and carbon dioxide gas, with no oxygen at all. Oxygen is a powerful oxidizing agent that is pretty tough on organic molecules, so it is important for us to remove it, and the modern atmosphere of the Earth is about 21% oxygen, which is a considerable amount. The modern Earth atmosphere is also about 78% nitrogen, so there is plenty of nitrogen around for our breakfast-style simulation, but getting the proper mix of nitrogen and carbon dioxide gas would be a bit of a kitchen laboratory challenge. So let's go with a pure carbon dioxide atmosphere. Take a shot glass and fill it 1/3 of the way with baking soda, and place it in the bottom of the metal mixing bowl. Then slowly dribble in some vinegar, but don't let it bubble over into the mixing bowl. That will create lots of heavy carbon dioxide gas that will totally displace all of the current Earth's atmosphere and its nasty oxygen gas.

You have now completed step one of the bootstrapping algorithm, as displayed in the top portion of Figure 2 because you now have a water mixture of lipid vesicles called liposomes that contain various organic molecules. As the water in your mixture evaporates, it will begin to form the gooey gel of the second step in the bootstrapping algorithm. Finally, when all of the water has evaporated you will have completed the third step of the bootstrapping algorithm, yielding a laminated structure of dried out lipids preserving polymers that have survived. Now you probably have already performed this experiment hundreds of times in your lifetime, and have also come upon the joy of trying to clean a mixing bowl with a bunch of dried out gunk in its bottom. And somebody probably even taught you how to complete the final step of the bootstrapping algorithm by letting the messy mixing bowl soak in warm water before trying to wash it out. Letting the dried out mess soak in warm water allows for lipid vesicles to form, and to bud out, and that brings you back to step one of the bootstrapping algorithm. Now all you have to do is to repeat the steps in this bootstrapping algorithm for about 100 billion trillion times, and after that, there will be a good chance of you finding living cells forming! Now that would not be such a big deal if you were not planning on doing much else for the next 100 million years, and you could also run the bootstrapping algorithm in every kitchen in the United States simultaneously. Similarly, Dave Deamer and Bruce Damer propose that if you had run this same bootstrapping algorithm for about 100 million years in a huge number of hydrothermal pools on a very large number of volcanic islands four billion years ago, you would indeed see living cells appear too. Or maybe it could happen much faster. Right now, we just don't know how much time it would take, and that is why Dave Deamer and Bruce Damer are currently researching this in their lab with a little machine that automates their bootstrapping algorithm.

Figure 3 – The lipids in a bar of soap have water-loving polar heads and water-hating nonpolar tails. The soap lipids can form a spherical micelle with all of the water-hating nonpolar tails facing inwards. A spherical micelle can surround the greasy nonpolar molecules of butter and allow them to be flushed away by a stream of polar water molecules. The lipids in a bar of soap can also form a cell-like liposome with a bilayer of lipid molecules that can surround the monomers and polymers of life.

The Very First Parasite
Now if we take the view that carbon-based life, like all new forms of self-replicating information, began as a parasite feeding off the extant organic molecules to be found on the early Earth, and was using the existing geological environments and geochemical processes of the time, then we can see that this new bootstrapping algorithm runs the incipient protocells through a variety of forms and host environments, like all parasites with complex life cycles love to do, in order to complete one protocell life cycle. In SETS - The Search For Extraterrestrial Software we saw that throughout historical time, parasites have usually been undeservedly disparaged by the biological community as degenerate forms of life, when in reality, parasites usually have much more complicated life cycles than most of the "higher" forms of life, and have had to learn to adapt to a multitude of environments and to a multitude of hosts in order to complete a single life cycle. I would suggest that Dave Deamer's and Bruce Damer's new bootstrapping algorithm mimics the rigors of a complex parasitic life cycle, and would, therefore, favor the development of the parasitic form of self-replicating information known to us as carbon-based life.

The Present is the Key to the Past
One of the founding principles of geology has been the Uniformitarianism of James Hutton presented in his Theory of the Earth (1785) and Charles Lyell's Principles of Geology (1830), and is best summed up by the phrase "the present is the key to the past", meaning that the geological processes that operate in the present also probably operated in the past and in exactly the same manner. So if you want to figure out how the rocks in the deep past came to be, just go out on a field trip to where similar rocks are being formed today and observe how it is done today.

Figure 4 – The cross-bedding found when digging into a modern sand dune explains how the cross-bedding in ancient sandstones came to be.

Figure 5 – Cross-bedding in sandstones arises when sand is pushed by a fluid, such as wind or water. The cross-bedding tells you which way was "up" when the sandstone was deposited and which way the fluid was flowing too.

And that is what Dave Deamer and Bruce Damer have done in their quest for a bootstrapping algorithm for the origin of carbon-based life by making field trips to hydrothermal fields like the Bumpass Hell on Mount Lassen in California and Mount Mutnovski in Kamchatka, Russia. They are now trying to replicate what they observed in the field with experiments in the lab.

Figure 6 – Above is Bumpass Hell, a hydrothermal field on the volcanic Mount Lassen in California that Dave Deamer and Bruce Damer cite as a present-day example of the type of environment that could have brought forth carbon-based life about four billion years ago, using their new bootstrapping algorithm.

Conclusion
I have long suggested that the researchers working on the origin of carbon-based life on this planet are now working just one level too low. Since carbon-based life is just one form of self-replicating information that we currently have at our disposal, it would make sense to first explore the characteristics of all the forms of self-replicating information that we currently have at hand, and the interactions amongst them all, before focusing on the origin of carbon-based life. For example, we are now living in one of those very rare times when a new form of self-replicating information, known to us as software, is coming to predominance. The parasitic/symbiotic relationships between the memes residing in the minds of human DNA survival machines, and the software on their computers is truly fascinating. In today's world most software is now created and spread by memes, and most memes are now spread by software. Understanding the complex interacting behaviors of all the forms of self-replicating information is critical because not only do they explain where we came from, they might also explain where we all are headed. After all, no one can now deny that civilization might come to a screeching halt because of a single poorly worded Tweet.

Addendum
Bruce Damer was kind enough to send me a PDF of their poster from the last ISSOL - The International Society for the Study of the Origin of Life - meeting. I have encoded it down below in HTML. Please note that the color-coded text corresponds to the color-coded sections on the poster image. They have also renamed their Terrestrial Origins Hypothesis as the more descriptive Hot Spring Origins Hypothesis.

A Hot Spring Origin of Life and Early Adaption Pathway in seven steps:

1. Synthesis of organics (a), key primordial building blocks for life, occurs in space prior and during the formation of the Solar System;
2. Accumulation of in-falling organics and other compounds generated within hot springs on an active volcanic landscape combine and undergo self-assembly of structures such as lipid membranes;
3. Concentration of compounds in small pools utilizes sunlight, heat and chemical energy to drive key prebiotic polymerization reactions and self-assembly of membranous structures;
4. Cycling of the products of these reactions in a wet-dry fluctuating hot spring ‘origin pool’ drives them through three phases: organic membranes in the pool i) Dry down to form layered Films between which organic building blocks bond together to form polymers; on refilling the films ii) Wet and bud off trillions of lipid Protocells some encapsulating random polymers. Each protocell undergoes a iii) Test, the first form of natural selection, and stable survivors accumulate into a moist Gel as the pool level drops. Through many iterations polymers iv) Interact, within the Gel and the Films evolving ever more complex functions until a form of pre-life (b) called a Progenote emerges that is able to grow and adapt;
5. Distribution of robust progenotes occurs by water or wind to other pools, rivers, and lakes, where they acquire and share evolutionary innovations including an early form of photosynthesis. Eventually, protocells develop the complicated innovation of cell division and initiate the transition into early life (c);
6. Adaptation of early microbial communities to stressful saltwater estuaries prepares them for access to the more extreme marine environment;
7. Large tides at the ancient seacoast select for microbial communities able to cement sand grains together forming the layers that build the stromatolites so abundant in the fossil record. Global life (d) enables Colonization of many niches on the land and in the sea, setting the stage for free-living cells and, after billions of years, complex multi-cellular organisms.

Comments are welcome at scj333@sbcglobal.net

To see all posts on softwarephysics in reverse order go to:
https://softwarephysics.blogspot.com/

Regards,
Steve Johnston