
Understanding the Frankenstein Tradition Henry I. Miller 2010-11-03 PALO ALTO – “ It’s alive , it’s moving , it’s alive ... IT’S ALIVE ! ” So said Dr. Victor Frankenstein when his “ creation ” was complete . Researchers have long been fascinated with trying to create life , but mainly they have had to settle for crafting variations of living organisms via mutation or other techniques of genetic engineering . In May , researchers at the J. Craig Venter Institute , led by Venter himself , synthesized the genome of a bacterium from scratch using chemical building blocks , and inserted it into the cell of a different variety of bacteria . The new genetic information “ rebooted ” its host cell and got it to function , replicate , and take on the characteristics of the “ donor . ” In other words , a sort of synthetic organism had been created . Reactions in the scientific community ranged from “ slight novelty ” to “ looming apocalypse . ” The former is more apt : Venter’s creation is evolutionary , not revolutionary . The goal of “ synthetic biology , ” as the field is known , is to move microbiology and cell biology closer to the approach of engineering , so that standardized parts can be mixed , matched , and assembled – just as off-the-shelf chassis , engines , transmissions , and so on can be combined to build a hot-rod . Achieving this goal could offer scientists unprecedented opportunities for innovation , and better enable them to craft bespoke microorganisms and plants that produce pharmaceuticals , clean up toxic wastes , and obtain ( or “ fix ” ) nitrogen from the air ( obviating the need for chemical fertilizers ) . During the past half-century , genetic engineers , using increasingly powerful and precise tools and resources , have achieved breakthroughs that are opening up new opportunities in a broad array of fields . The Venter lab’s achievement builds on similar work that began decades ago . In 1967 , a research group from Stanford Medical School and Caltech demonstrated the infectiousness of the genome of a bacterial virus called ΦΧ174 , whose DNA had been synthesized with an enzyme using the intact viral DNA as a template , or blueprint . That feat was hailed as “ life in a test tube . ” In 2002 , a research group at the State University of New York , Stony Brook , created a functional , infectious poliovirus solely from basic , off-the-shelf chemical building blocks . Their only blueprint for engineering the genome was the known sequence of RNA ( which comprises the viral genome and is chemically very similar to DNA ) . Similar to the 1967 experiments , the infectious RNA was synthesized enzymatically . It was able to direct the synthesis of viral proteins in the absence of a natural template . Once again , scientists had , in effect , created life in a test tube . Venter’s group did much the same thing in the recently reported research , except that they used chemical synthesis instead of enzymes to make the DNA . But some of the hype that surrounded the publication of the ensuing article in the journal Nature was disproportionate . Along with the Venter paper , Nature published eight commentaries on the significance of the work . The “ real ” scientists were aware of the incremental nature of the work , and questioned whether the Venter group had created a genuine “ synthetic cell , ” while the social scientists tended to exaggerate the implications of the work . Mark Bedau , a professor of philosophy at Reed College , wrote that the technology’s “ new powers create new responsibilities . Nobody can be sure about the consequences of making new forms of life , and we must expect the unexpected and the unintended . This calls for fundamental innovations in precautionary thinking and risk analysis . ” But , with increasing sophistication , genetic engineers using old and new techniques have been creating organisms with novel or enhanced properties for decades . Regulations and standards of good practice already effectively address organisms that may be pathogenic or that threaten the natural environment . ( If anything , these standards are excessively burdensome . ) On the other hand , Swiss bioengineer Martin Fussenegger correctly observed that the Venter achievement “ is a technical advance , not a conceptual one . ” Other scientists noted that the organism is really only “ semi-synthetic , ” because the synthetic DNA ( which comprises only about 1 % of the dry weight of the cell ) was introduced into a normal , or non-synthetic , bacterium . Understanding the history of synthetic biology is important , because recognizing the correct paradigm has critical implications for how governments regulate it , which in turn affects the potential application and diffusion of the technology . Thirty-five years ago , the US National Institutes of Health adopted overly risk-averse guidelines for research using recombinant DNA , or “ genetic engineering , ” techniques . Those guidelines , based on what has proved to be an idiosyncratic and largely invalid set of assumptions , sent a powerful message that scientists and the federal government were taking seriously speculative , exaggerated risk scenarios – a message that has afflicted the technology’s development worldwide ever since . Synthetic biology offers the prospect of powerful new tools for research and development in innumerable fields . But its potential can be fulfilled only if regulatory oversight is based on science , sound risk analysis , and an appreciation of the mistakes of history . 