<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Giacomo Tesio</title>
    <description>The latest articles on Forem by Giacomo Tesio (@shamar).</description>
    <link>https://forem.com/shamar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F94669%2F67e5a472-315c-4739-a7fd-29b59077e4bb.jpeg</url>
      <title>Forem: Giacomo Tesio</title>
      <link>https://forem.com/shamar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/shamar"/>
    <language>en</language>
    <item>
      <title>About European Draft for AI Ethics Guidelines</title>
      <dc:creator>Giacomo Tesio</dc:creator>
      <pubDate>Mon, 28 Jan 2019 00:00:00 +0000</pubDate>
      <link>https://forem.com/shamar/about-european-draft-for-ai-ethics-guidelines-41p6</link>
      <guid>https://forem.com/shamar/about-european-draft-for-ai-ethics-guidelines-41p6</guid>
      <description>&lt;p&gt;What follows are the comments I’ve sent to the High-Level Expert Group working to define AI Ethics Guidelines for the European Commission.&lt;/p&gt;

&lt;p&gt;To understand them, you need a decent understanding of Artificial Intelligence and Machine Learning and to read the &lt;a href="https://ec.europa.eu/futurium/en/system/files/ged/ai_hleg_draft_ethics_guidelines_18_december.pdf"&gt;DRAFT ETHICS GUIDELINES FOR TRUSTWORTHY AI&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Introduction: Rationale and Foresight of the Guidelines
&lt;/h1&gt;

&lt;p&gt;The first lines of the introduction highlight a serious flaw of the draft: the pillars that underpin the Commission’s vision show a fundamental bias:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;increasing public and private investments in AI to boost its uptake,&lt;/li&gt;
&lt;li&gt;preparing for socio-economic changes, and&lt;/li&gt;
&lt;li&gt;ensuring an appropriate ethical and legal framework to strengthen European values&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Being eager to adopt a largely misunderstood technology obviously inhibits the ability to reason about its limits and risks.&lt;/p&gt;

&lt;p&gt;Before trying to boost its uptake, the Commission should try to understand to what extent and in which fields of endeavour the set of techniques that goes under the AI umbrella should be experimented.&lt;/p&gt;

&lt;p&gt;As Shoshana Zuboff recently wrote, technology is NOT an unstoppable force of nature, but a human artifact serving interests and needs of specific humans. In other words, Technology is a prosecution of Politics by other means: each advancement can be designed to serve the public interest or private and elitarian ones. And just like with Politics, a renounce to participate to its course just means to being subject to others’ will.&lt;/p&gt;

&lt;p&gt;Before talking about “Trustworthy AI”, we should have a population able to understand the topic enough for their trust to be meaningful.&lt;/p&gt;

&lt;p&gt;As for today, without a serious investments in schools to foster History and Informatics as preconditions of our citizenship, such trust can not be meaningful but just deceptive and ill founded.&lt;/p&gt;

&lt;p&gt;It’s not a trust on the technology, but in the corporations and the “experts” that can exploit such trust and the widespread ignorance of the topic to weaken regulations and streghten their handle on society.&lt;/p&gt;

&lt;p&gt;Having said that, the high level description outlined for the Ethical framework is basically sound: it’s reasonable to think that when the whole population will be able to understand how a neural network’s calibration differs from a k-mean clustering, a similar framework will emerge.&lt;/p&gt;

&lt;p&gt;However the glossary that preceed the Introduction already shows that we are not ready for such framework: despite being written by an high level expert group on AI, the definitions still use an antropomorphic language to describe what is just software. In particular describing software bugs (either intentional or unintentional) as “bias” shows a deep misunderstanding about the software in question and about the statistical processes that define its behaviour. Later on, similar concerns emerge when the draft cites “non-determinism” while talking about software that is executed by deterministic machines (aka computers).&lt;/p&gt;

&lt;p&gt;Such language is worrying because it shows a tendency from the HLEG to rationalize the risks as inevitable instead of understanding them deeply and taking them into account.&lt;/p&gt;

&lt;h1&gt;
  
  
  Chapter I: Respecting Fundamental Rights, Principles and Values - Ethical Purpose
&lt;/h1&gt;

&lt;p&gt;Despite an interesting and convidisible introduction, the principles that the chapter proposes lack a fundamental hierarchical structure.&lt;/p&gt;

&lt;p&gt;It should be quite evident by looking at such principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Principle of Beneficence: “Do Good”&lt;/li&gt;
&lt;li&gt;The Principle of Non maleficence: “Do no Harm”&lt;/li&gt;
&lt;li&gt;The Principle of Autonomy: “Preserve Human Agency”&lt;/li&gt;
&lt;li&gt;The Principle of Justice: “Be Fair”&lt;/li&gt;
&lt;li&gt;The Principle of Explicability: “Operate transparently”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if we hadn’t more than two thousands years from the Hippocratic Oath and generations of physicians grown with the “Primum non nocere” maxim, we can see how the last three principles are just specializations of the more general “Do no Harm”. In particular the Principle of Autonomy tries to address risks to individuals, the Principle of Justice tries to address the risks to weak groups and the Principle of Explicability tries to address socio-political risks.&lt;/p&gt;

&lt;p&gt;Since the Principle of Non Maleficience is so preponderant to require three specializations, we should put it first, before the principle of Beneficience, and underlining its relation with the others:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Principle of Non maleficence: “Do no Harm” 

&lt;ul&gt;
&lt;li&gt;The Principle of Autonomy: “Preserve Human Agency”&lt;/li&gt;
&lt;li&gt;The Principle of Justice: “Be Fair”&lt;/li&gt;
&lt;li&gt;The Principle of Explicability: “Operate transparently”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;The Principle of Beneficence: “Do Good”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The road to hell is paved with good intentions: just like with medicine, whenever simpler and safer solutions exist they should be preferred to more complex and risky ones.&lt;/p&gt;

&lt;p&gt;But there is an even more important omission in the list: the Principle of Ultimate Human Accountability.&lt;/p&gt;

&lt;p&gt;This is a fundamental principle that underlie all European ethical and legal system: at least a human must always be accountable for the problems caused by a human artifact.&lt;/p&gt;

&lt;p&gt;In other terms: what is forbidden to a human can not be allowed through an artificial proxy, no matter how “autonomous” (aka expensive to debug) such proxy is.&lt;/p&gt;

&lt;p&gt;Talking about ethics is void if we are not ready to enforce this simple but fundamental principle of human responsibility.&lt;/p&gt;

&lt;p&gt;The section on “Lethal Autonomous Weapon Systems” is in direct contrast to all the principles stated above.&lt;/p&gt;

&lt;p&gt;The only way an Ethical Framework can be credible while proposing principles like “Do no Harm”, “Preserve Human Agency”, “Be Fair”, “Operate transparently” and “Do Good” is to clearly state that Autonomous Weapon Systems (lethal or not) must be forbidden on the European territory.&lt;/p&gt;

&lt;p&gt;The section on the “Potential longer-term concerns” shows the usual sci-fi based fears that are the flip side of the current hype.&lt;/p&gt;

&lt;p&gt;Instead of being concerned about Artificial Consciousness that would be way easier to fake than to implement we should be afraid of semi-autonomous weapons in the hands of a small group of people holding most of the planet’s wealth. And in the count of such weapons we should obviously include every tool that can be used to direct human attention, to manipulate feelings or perceptions and to forge mass opinions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Chapter II: Realising Trustworthy AI
&lt;/h1&gt;

&lt;p&gt;Even this chapter present several issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The short paragraph about “Accountability” suggest to design mechanisms that can range from monetary compensation to apology, but it forgets to include prison: to gain trust it is important to explicitly state that an autonomous proxy cannot become a “Get Out of Jail Free” ticket.&lt;/li&gt;
&lt;li&gt;The section on “Safety” looks like it was designed to be ineffective: it’s pointless to assess potential risks associated with the use of AI-based products and services without defining serious punishments when things goes wrong anyway.&lt;/li&gt;
&lt;li&gt;The section on “Trasparency” is too vague and forgiving: a simpler approach is to say that no opacity must be allowed in applications that consume human data. Such rules would instantly skyrocket private and public investments in AI research, looking for new machine learning techniques that can be fully explained and debugged.&lt;/li&gt;
&lt;li&gt;The section on “Robustness” looks well designed but open to a wide de-responsibilization when it improperly talks about “non-determinism” (false, if we are talking about deterministic, non-quantum, computers) and it cites “complexity”, “opacity”, and “sensitivity to training/model building conditions” as a sort of justifications for unreproducible results. Simply, whenever such conditions exists, the AI program is not robust and should not be applied to problems that require such robustness.&lt;/li&gt;
&lt;li&gt;The section about “Human Autonomy” is very scary: in no way people should be nudged by machines. If AI will be successful in enhancing human wealth as it’s promise to be, a lot of friendly people with a lot of free time will be able to nudge us on our request, but it’s too dangerous to let flawed machines manipulate humans whatever the goal: every software has bugs vulnerabilities and many have intentional backdoors: AI won’t be different.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Later, in “Architectures for Trustworthy AI”, while considering the technical means to ensure an ethical behaviour the HLEG suggest to integrate an ethical signal in the “sense” phase of the stochastic system.&lt;/p&gt;

&lt;p&gt;This is both naive and weird:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WHICH ethics we should use?
If we widely deploy autonomous machines following a certain ethical model, people will adapt to it (because machines cannot really adapt to us): this could turn to be most effective brain washing project ever conceived. Humans naturally adapt to the sorrounding intelligences: put a consumist agent in every room, and you will build a population of consumists.&lt;/li&gt;
&lt;li&gt;HOW MUCH ethics?
Who will decide the weight of that signal? And what when a bug will inhibit it? Or what if other inputs overwhelm such signal? The only use of an ethical signal in an autonomous system is to shield corporations from taking full responsibility of errors: it’s dumb to pretend to teach ethics to trolleys, we should build infrastructures that simply prevent lethal incidents to occur.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Moreover in the section about Regulation we lack any reference to penal justice: just like before, it should be clearly stated that when an autonomous artifact kill or harm, one or more humans will be held fully accountable for it.&lt;/p&gt;

&lt;h1&gt;
  
  
  Chapter III: Assessing Trustworthy AI
&lt;/h1&gt;

&lt;p&gt;I really appreciated the flexible approach to the assessment process: talking about ethics, a checklist would be too easy to exploit.&lt;/p&gt;

&lt;p&gt;For sure, each technique requires different kind of assessments: for example the dataset used to calibrate a k-mean could be enough to reproduce the calibration process and to exclude any racial discriminations, but it would be totally inadequate for assess any property of a classifier based on an artificial neural network.&lt;/p&gt;

&lt;p&gt;The risk however is that, without a widespread understanding of the AI techniques, the Commission will ask to the wolfs how to rule the sheeps: we cannot rely on experts that consults large corporations to define any assessment of “trust” into something that can manipulate people.&lt;/p&gt;

&lt;p&gt;Moreover, being able to assess the Ethics of a “Trustworthy AI” cannot replace clear regulation establishing the characteristics that an algorithm must have before being fed with human data.&lt;/p&gt;

&lt;p&gt;In particular we need to extend the right to “meaningful information about the logic involved” by each AI processing beyond the individuals protected by the article 13 of the GDPR: even groups, such as families, neightbors, customers and so on should have the right to know and understand the exact logic applied to their collective data, when and to which aim the processing occurs.&lt;/p&gt;

&lt;h1&gt;
  
  
  General Comments
&lt;/h1&gt;

&lt;p&gt;Despite all the issues described above, I appreciated the effort and care that has been evidently put by the HLEG in the writing of this draft.&lt;/p&gt;

&lt;p&gt;It’s important for Europe to fill our technological gap with U.S.A. and China and it’s conforting to see serious people working on the ethical issues that will emerge from the AI adoption.&lt;/p&gt;

&lt;p&gt;However is even more important to avoid short-cuts. Good will and honesty are fundamental, but not enough to balance lobbying and hype.&lt;/p&gt;

&lt;p&gt;To address our technological issues (including AI adoption) we need to raise the general population understanding of Informatics. We need a new mass education plan, with serious investments on teachers and professors from the primary school on. We need to raise a generation of people able to modify the software that they use and they feed with their own data.&lt;/p&gt;

&lt;p&gt;Since Technology is Politics, being able to self-host and customize the applications we use is the only way to preserve democracy: it will prevent data capitalization and people manipulation.&lt;/p&gt;

&lt;p&gt;Programming is today what Writing was during Ancient Egypt: a tool which is totally primitive, but effective to collect and retain Power among humans exactly because it is primitive.&lt;/p&gt;

&lt;p&gt;We need better systems, better programming languages and people able to use software without being manipulated through it.&lt;/p&gt;

&lt;p&gt;Until then, widespread adoption of AI can be useful, but it’s irresponsible to apply it to human data. We need prudent regulations that err on the side of caution, not because computer-aided statistics is dangerous in itself but because it’s too easy to abuse it and manipulate or hurt people and societies in a context when most people can’t understand their working.&lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>ai</category>
      <category>ethics</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Jehanne: simplicity awakes</title>
      <dc:creator>Giacomo Tesio</dc:creator>
      <pubDate>Thu, 15 Nov 2018 00:00:00 +0000</pubDate>
      <link>https://forem.com/shamar/jehanne-simplicity-awakes-4lh5</link>
      <guid>https://forem.com/shamar/jehanne-simplicity-awakes-4lh5</guid>
      <description>&lt;p&gt;Preemptive multitasking is now more than 50 years old, initially introduced in PDP-6 Monitor and MULTICS in 1964. Instead of relying on processes to cooperatively release the CPU to the kernel, they registered &lt;a href="https://en.wikipedia.org/wiki/Interrupt" rel="noopener noreferrer"&gt;timer interrupt handlers&lt;/a&gt; to move control back to kernel code.&lt;/p&gt;

&lt;p&gt;Nevertheless, processes were still able to yield control of the CPU to the kernel during a &lt;a href="https://en.wikipedia.org/wiki/Preemption_(computing)#Time_slice" rel="noopener noreferrer"&gt;time-slice&lt;/a&gt; by calling any &lt;a href="https://en.wikipedia.org/wiki/System_call" rel="noopener noreferrer"&gt;system call&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;System calls are often distinguished into blocking or non-blocking depending on the probability that the kernel will return the control to the calling process’ code before the next tick.&lt;/p&gt;

&lt;p&gt;In real world, non-blocking syscalls might block the process and blocking syscalls might not block at all: it all depends on implementation details and on the state of the system at run-time.&lt;/p&gt;

&lt;p&gt;Classical examples of blocking system calls are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;sleep&lt;/code&gt; that should block for a certain number of seconds&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;wait&lt;/code&gt; that could block until a children process exit&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;read&lt;/code&gt; that would block until a chunk of data is available&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;write&lt;/code&gt; that would block on a pipe without enough space for the new data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  CPU control and time
&lt;/h2&gt;

&lt;p&gt;Sleep is a very interesting syscall because its whole point is just to yield the CPU for a while, so that other processes can use it. Its main use case is to poll for a certain resource to become available without subtracting computing power that could be used to produce such resource: it’s a tool for cooperative multitasking in a OS supporting preemptive multitasking.&lt;/p&gt;

&lt;p&gt;Other blocking system calls (like wait, read and write) depend on external events to return control to the process. Soon programmers realized that an external event might never occur and designed ways to mitigate the risks.&lt;/p&gt;

&lt;p&gt;Unix introduced &lt;a href="https://en.wikipedia.org/wiki/Signal_(IPC)" rel="noopener noreferrer"&gt;signals&lt;/a&gt; and services like &lt;a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/alarm.html" rel="noopener noreferrer"&gt;alarm&lt;/a&gt; and &lt;a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/setitimer.html" rel="noopener noreferrer"&gt;setitimer&lt;/a&gt; to give back control to the calling process on certain events or after a certain time.&lt;/p&gt;

&lt;p&gt;Later, new syscalls like &lt;a href="https://idea.popcount.org/2016-11-01-a-brief-history-of-select2/" rel="noopener noreferrer"&gt;select&lt;/a&gt;, &lt;a href="http://pubs.opengroup.org/onlinepubs/7908799/xsh/poll.html" rel="noopener noreferrer"&gt;poll&lt;/a&gt;, &lt;a href="https://www.freebsd.org/cgi/man.cgi?query=kqueue&amp;amp;sektion=2" rel="noopener noreferrer"&gt;kqueue&lt;/a&gt; or &lt;a href="http://pubs.opengroup.org/onlinepubs/9699919799/functions/sigtimedwait.html" rel="noopener noreferrer"&gt;sigtimedwait&lt;/a&gt; were introduced with a timeout parameter from the very beginning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Plan 9 from Bell Labs
&lt;/h2&gt;

&lt;p&gt;Compared to the &lt;a href="http://man7.org/linux/man-pages/man2/syscalls.2.html" rel="noopener noreferrer"&gt;400 system calls&lt;/a&gt; of Linux, Plan 9’s &lt;a href="http://aiju.de/plan_9/plan9-syscalls" rel="noopener noreferrer"&gt;API is rather simpler&lt;/a&gt; but it still supports a bit of each time-control styles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://man.9front.org/2/sleep" rel="noopener noreferrer"&gt;sleep&lt;/a&gt; suspends the calling process for a number of milliseconds specified by the argument.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://man.9front.org/2/sleep" rel="noopener noreferrer"&gt;alarm&lt;/a&gt; causes an &lt;a href="http://man.9front.org/2/notify" rel="noopener noreferrer"&gt;alarm note&lt;/a&gt; to be sent to the invoking process after a number of milliseconds.&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://man.9front.org/2/semacquire" rel="noopener noreferrer"&gt;tsemacquire&lt;/a&gt; only waits for a number of milliseconds to acquire a semaphore.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By design, Plan 9 provides only a very limited support for non-blocking I/O (through &lt;code&gt;alarm&lt;/code&gt;) and no support for &lt;a href="https://notes.shichao.io/unp/ch6/" rel="noopener noreferrer"&gt;I/O multiplexing&lt;/a&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if a program needs to &lt;strong&gt;wait for several resources&lt;/strong&gt; , it usually calls &lt;a href="http://man.9front.org/2/fork" rel="noopener noreferrer"&gt;rfork&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;if a program want to &lt;strong&gt;serve several concurrent clients&lt;/strong&gt; , it usually expose a &lt;a href="http://man.9front.org/5/intro" rel="noopener noreferrer"&gt;9P2000 filesystem&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Furthermore, with &lt;a href="http://man.cat-v.org/9front/2/thread" rel="noopener noreferrer"&gt;libthread&lt;/a&gt;, Plan 9 provides an implementation of Hoare’s &lt;a href="http://www.usingcsp.com/cspbook.pdf" rel="noopener noreferrer"&gt;Communicating Sequential Processes&lt;/a&gt;in which dedicated (preemptively scheduled) processes are used to issue any blocking system calls and several cooperatively-scheduled threads sharing memory in a single process are used to access global state.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Curse of Frankenstein
&lt;/h1&gt;

&lt;p&gt;The &lt;a href="https://sourceware.org/bugzilla/show_bug.cgi?id=15819" rel="noopener noreferrer"&gt;complex interactions&lt;/a&gt; between the different ways to handle timeouts in Unix (and, to a lesser extent, in Plan 9) are direct effects of its &lt;a href="http://marmaro.de/docs/studium/unix-phil/unix-phil.pdf" rel="noopener noreferrer"&gt;design philosophy&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;As explained by Richard P. Gabriel in &lt;a href="https://www.dreamsongs.com/RiseOfWorseIsBetter.html" rel="noopener noreferrer"&gt;his famous essay&lt;/a&gt;, "Unix and C are the ultimate computer viruses".&lt;/p&gt;

&lt;h2&gt;
  
  
  Worse is better, isn’t it?
&lt;/h2&gt;

&lt;p&gt;Worse-is-Better is a model of software design and implementation which has the following characteristics (in approximately descending order of importance):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: The design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Correctness&lt;/strong&gt;: The design should be correct in all observable aspects, but it is slightly better to be simple than correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: The design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either complexity or inconsistency in the implementation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Completeness&lt;/strong&gt;: The design must cover as many important situations as is practical. All reasonably expected cases should be covered.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Completeness can be sacrificed in favor of any other quality. In fact, completeness must be sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.&lt;/p&gt;

&lt;p&gt;In a way the so called “New Jersey style” was a rush for a &lt;a href="https://en.wikipedia.org/wiki/Minimum_viable_product" rel="noopener noreferrer"&gt;minimum viable product&lt;/a&gt; able to minimize the &lt;a href="https://en.wikipedia.org/wiki/Time_to_market" rel="noopener noreferrer"&gt;time-to-market&lt;/a&gt; and to gain the &lt;a href="https://en.wikipedia.org/wiki/First-mover_advantage" rel="noopener noreferrer"&gt;first mover advantage&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Quoting Gabriel&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Both early Unix and C compilers had simple structures, are easy to port, require few machine resources to run, and provide about 50%-80% of what you want from an operating system and programming language.&lt;/p&gt;

&lt;p&gt;[…]&lt;/p&gt;

&lt;p&gt;It is important to remember that the initial virus has to be basically good. If so, the viral spread is assured as long as it is portable. &lt;strong&gt;Once the virus has spread&lt;/strong&gt; , there will be &lt;strong&gt;pressure to improve it&lt;/strong&gt; , possibly by increasing its functionality &lt;strong&gt;closer to 90%&lt;/strong&gt; , but &lt;strong&gt;users have already been conditioned to accept worse&lt;/strong&gt; than the right thing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So far so good.&lt;/p&gt;

&lt;p&gt;Early Unix, like Plan 9, didn’t aim at perfection, but at serving the majority of users’ need well enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  But is "enough", enough?
&lt;/h2&gt;

&lt;p&gt;The Unix philosophy spread beyond Unix, and it became the common wisdom of software engineering so far.&lt;/p&gt;

&lt;p&gt;For early Unix and Plan 9, enough is enough. Look at 9front to see a modern system that follows this philosophy consistently.&lt;/p&gt;

&lt;p&gt;There is a catch, however.&lt;br&gt;&lt;br&gt;
Plan 9 (like early Unix), is a system evolving as a whole. This is particularly visible in the &lt;a href="http://code.9front.org/hg/plan9front/" rel="noopener noreferrer"&gt;9front repository&lt;/a&gt;. The whole system evolves together, all programs are modified consistently, answering to the ever changing needs of &lt;a href="http://cat-v.org/" rel="noopener noreferrer"&gt;its users&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Plan 9 is &lt;strong&gt;one&lt;/strong&gt; application of computers. An operating system split into several executables, but still &lt;strong&gt;one thing&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So in its asymptotic path toward completeness, all pieces progress together. When they provides 90% of required functionality, it really means 90%. Or 95%. Or 97%. Or 99%.&lt;/p&gt;

&lt;p&gt;But what if we split the system into independent components and assign them to different teams following the same philosophy?&lt;/p&gt;

&lt;p&gt;This is what happened to mainstream operating systems.&lt;/p&gt;

&lt;p&gt;With their widespread adoption, the variety of people needs couldn’t be served anymore by a single company. Thus good APIs and development tools provided a strategic advantage to build ecosystems of applications that, by running on a certain OS, would have expanded its market share.&lt;/p&gt;

&lt;p&gt;Unix was particularly well suited for this kind of &lt;strong&gt;race for application developers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However this process had a significant but overlooked drawback: the running operating system lose its unity, its coherence. The operating system became a collection of variegate software, developed by a variety of different teams, each with their own goals and taste and set of best practices.&lt;/p&gt;
&lt;h2&gt;
  
  
  More pieces, more cracks!
&lt;/h2&gt;

&lt;p&gt;Take one application that works correctly 99% of times, and you will be fine 99% of times.&lt;/p&gt;

&lt;p&gt;But what if you have 10 applications each working correctly 99% of times?&lt;/p&gt;

&lt;p&gt;The probability that they work correctly together at each computer clock is (99%)^10. That is: their composition will do what you expect roughly &lt;strong&gt;90% of times&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With such assumption, the probability of a system behaving correctly goes down pretty quickly approaching the formula&lt;/p&gt;

&lt;p&gt;&lt;em&gt;p(n) = (0.99)ⁿ&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fjehanne.io%2Fgraphic%2Fprobability_of_correctness.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/http%3A%2F%2Fjehanne.io%2Fgraphic%2Fprobability_of_correctness.png" alt="Probability of whole system correctness."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How many programs are you running right now? :-D&lt;/p&gt;

&lt;p&gt;This is the curse of Frankenstein: more pieces, more cracks.&lt;/p&gt;
&lt;h2&gt;
  
  
  Simplex Sigillum Veri
&lt;/h2&gt;

&lt;p&gt;Plan 9 from Bell Labs followed the New Jersey style from the very beginning and still does so in most if it’s incarnations.&lt;/p&gt;

&lt;p&gt;But what about Jehanne, &lt;a href="https://www.theguardian.com/world/2002/jun/17/humanities.internationaleducationnews" rel="noopener noreferrer"&gt;from Meucci’s laboratory&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;Turns out the design of Jehanne doesn’t follow the New Jersey style. I have no rush. Yet Jehanne doesn’t follow the MIT/Stanford style either.&lt;/p&gt;

&lt;p&gt;To follow Gabriel’s scheme, we could say that Jehanne is based upon&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplicity&lt;/strong&gt;: The design must be simple. Few simple, easy to learn and orthogonal abstractions should be able to describe any use case conceivable.
If the implementation is difficult, the design is not simple enough.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Correctness&lt;/strong&gt;: The design should be correct in all observable aspects.
Incorrectness is not allowed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consistency&lt;/strong&gt;: The design must not be inconsistent. Any inconsistency reveals a design problem: either a missing abstraction or abstractions that are not orthogonal enough.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composability&lt;/strong&gt;: Completeness should naturally emerge as a (desirable) side effect.
As such, it cannot be a goal: the design must cover as &lt;strong&gt;few&lt;/strong&gt; important situations as practical and let the user compose the abstractions provided to build what he needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I call this set of principles &lt;em&gt;simplex sigillum veri&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It’s deeply inspired by the works of other Italian hackers, such as &lt;a href="https://en.wikipedia.org/wiki/Antonio_Meucci" rel="noopener noreferrer"&gt;Antonio Meucci&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Programma_101" rel="noopener noreferrer"&gt;Pier Giorgio Perotto&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Guglielmo_Marconi" rel="noopener noreferrer"&gt;Guglielmo Marconi&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Renzo_Piano" rel="noopener noreferrer"&gt;Renzo Piano&lt;/a&gt; and &lt;a href="https://en.wikipedia.org/wiki/Leonardo_da_Vinci" rel="noopener noreferrer"&gt;Leonardo da Vinci&lt;/a&gt;.&lt;/p&gt;
&lt;h1&gt;
  
  
  The Awake system call
&lt;/h1&gt;

&lt;p&gt;Plan 9 supports &lt;strong&gt;39 system calls&lt;/strong&gt; (not counting obsolete ones). Since some system calls can be expressed in term of the others, in Jehanne I moved the duplicates in userspace.&lt;/p&gt;

&lt;p&gt;The idea is that a smaller kernel surface makes it easier to get it right and simple in the long run.&lt;/p&gt;

&lt;p&gt;During such clean up, I realized that &lt;code&gt;sleep&lt;/code&gt;, &lt;code&gt;alarm&lt;/code&gt; and&lt;code&gt;tsemacquire&lt;/code&gt; were somehow “ugly”: I supposed that they were mixing orthogonal issues and looked for the missing abstraction they were hiding.&lt;/p&gt;

&lt;p&gt;This is how the &lt;code&gt;awake&lt;/code&gt; syscall was born:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;long awake(long milliseconds);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Awake is the complement of &lt;code&gt;sleep&lt;/code&gt;: it &lt;strong&gt;books a new time slice&lt;/strong&gt; in the future. It’s a fundamental building block that can be used to implement other services in user space, like &lt;code&gt;sleep&lt;/code&gt;, &lt;code&gt;alarm&lt;/code&gt; and &lt;code&gt;tsemacquire&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;It interrupts a blocking syscall after a certain number of milliseconds. On failure it returns &lt;code&gt;0&lt;/code&gt;. On success it returns a negative long that can be used as an identifier to release the booked time slice.&lt;/p&gt;

&lt;p&gt;On wakeup, no note or signal is sent to the process, the process’ error string left unchanged: the blocking syscall simply returns to the process with a &lt;code&gt;~0ULL&lt;/code&gt; result.&lt;/p&gt;

&lt;p&gt;A process can register how many wakeups it want (within a global system cap) and each wake up will have a chance to interrupt a system call.&lt;/p&gt;

&lt;p&gt;Wakeups are booked in two distinct group that do not interact: normal process execution and note handlers. Such groups are automatically reset respectively on &lt;a href="http://man.cat-v.org/9front/2/exits" rel="noopener noreferrer"&gt;exits&lt;/a&gt; and on &lt;a href="http://man.cat-v.org/9front/2/notify" rel="noopener noreferrer"&gt;noted&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In libc, &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/lib/c/9sys/awakened.c" rel="noopener noreferrer"&gt;two very simple functions&lt;/a&gt; wrap &lt;code&gt;awake&lt;/code&gt; to enhance readability.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Awakened&lt;/code&gt; tells the calling process whether a certain wakeup already occurred.&lt;code&gt;Forgivewkp&lt;/code&gt; tells the kernel to remove a certain wakeup.&lt;/p&gt;

&lt;p&gt;With these primitives it’s trivial to move &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/lib/c/9sys/sleep.c" rel="noopener noreferrer"&gt;sleep&lt;/a&gt; and &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/lib/c/9sys/tsemacquire.c" rel="noopener noreferrer"&gt;tsemaquire&lt;/a&gt; to libc.&lt;/p&gt;

&lt;p&gt;In particular, &lt;code&gt;tsemaquire&lt;/code&gt; shows pretty well the simple idiom of awake:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* book a time slice in the future */
long wkup = awake(ms);
while(blocking_syscall() == -1){
    if(jehanne_awakened(wkup)){
        /* handle syscall timed out */
    }
    /* the syscall has been otherwise interrupted, you can
     * - try again
     * - fail with an error
     * - do whatever fit
     */
}
/* the syscall completed, release the booked time slice... */
jehanne_forgivewkp(wkup);

/* ...and enjoy */
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(the mindful reader will notice that &lt;a href="https://github.com/JehanneOS/jehanne/issues/2" rel="noopener noreferrer"&gt;&lt;code&gt;alarm&lt;/code&gt; is still waiting to be moved to user space&lt;/a&gt;... the fact is that it’s too boring of a task!)&lt;/p&gt;

&lt;p&gt;To be fair, &lt;code&gt;awake&lt;/code&gt; was originally designed to interrupt &lt;code&gt;rendezvous&lt;/code&gt; only, to enable &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/lib/c/9sys/qlock.c" rel="noopener noreferrer"&gt;timeouts support for QLock, RWLock and Rendez&lt;/a&gt; in libc.&lt;/p&gt;

&lt;p&gt;But from the very beginning it was clear that it could have been generalized and composed with other system calls, to provide other services.&lt;/p&gt;

&lt;p&gt;With the advent of &lt;a href="https://github.com/JehanneOS/jehanne/tree/master/sys/src/lib/posix" rel="noopener noreferrer"&gt;libposix&lt;/a&gt;, I used &lt;code&gt;awake&lt;/code&gt; to implement support for POSIX &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/lib/posix/files.c" rel="noopener noreferrer"&gt;non-blocking I/O&lt;/a&gt;, &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/lib/posix/processes.c" rel="noopener noreferrer"&gt;signals&lt;/a&gt; and &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/lib/posix/sigsets.c" rel="noopener noreferrer"&gt;sigset waiters&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Which in turn enabled the port of &lt;a href="https://dev.to/shamar/jehanne-in-2017-1he7-temp-slug-9939602"&gt;newlib&lt;/a&gt; and of &lt;a href="https://dev.to/shamar/mksh-on-jehanne-572d-temp-slug-4408132"&gt;MirBSD Korn Shell&lt;/a&gt; to Jehanne.&lt;/p&gt;

&lt;p&gt;All this with more or less &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/kern/port/awake.c" rel="noopener noreferrer"&gt;600 lines of code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Two kernel processes, a &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/kern/port/awake.c#L471" rel="noopener noreferrer"&gt;timer&lt;/a&gt; and a &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/kern/port/awake.c#L621" rel="noopener noreferrer"&gt;ringer&lt;/a&gt;, cooperate through a linked list of wakeups kept &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/kern/port/awake.c#L369" rel="noopener noreferrer"&gt;in order of expiration&lt;/a&gt; that is filled by the system calls. On each &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/kern/port/awake.c#L447" rel="noopener noreferrer"&gt;tick&lt;/a&gt;, if the first element of the registry is expired, the interrupt handler awake the timer, that prepare a collection of expired timers.&lt;/p&gt;

&lt;p&gt;Then the ringer start a loop to interrupt the process properly.&lt;/p&gt;

&lt;p&gt;These two different processes make it possible to keep processing new wakeups while the ringer is waiting for the process to be in an interruptible state.&lt;/p&gt;

&lt;p&gt;Not &lt;a href="https://github.com/JehanneOS/jehanne/blob/master/sys/src/kern/port/awake.c#L76" rel="noopener noreferrer"&gt;all blocking system calls&lt;/a&gt; can be interrupted though. &lt;code&gt;Create&lt;/code&gt; is a notable example of a blocking system call that has been excluded from the interruptible ones, to prevent a timeout to leave an orphan file behind.&lt;/p&gt;

&lt;h1&gt;
  
  
  Issues and future uses
&lt;/h1&gt;

&lt;p&gt;Awake will be used to implement all timeouts of Jehanne’s system calls.&lt;/p&gt;

&lt;p&gt;Even without libposix, it provides a simple mechanism to implement non-blocking I/O, if needed.&lt;/p&gt;

&lt;p&gt;And it will be used to implement timeouts in multiplexing I/O too.&lt;/p&gt;

&lt;p&gt;Unfortunately, as an interface to the kernel scheduler, &lt;code&gt;awake&lt;/code&gt; doesn’t work with user space schedulers that keep control of their own tasks. Right now, this just means that &lt;code&gt;qlockt&lt;/code&gt;, &lt;code&gt;rlockt&lt;/code&gt;, &lt;code&gt;wlockt&lt;/code&gt; and &lt;code&gt;rsleept&lt;/code&gt;cannot work when linking libthread. In the long run, it might make slightly more difficult to port virtual machines and programming languages that provide their own scheduler in user space, like Go or Java.&lt;/p&gt;

&lt;p&gt;The solution however is already outlined by libthread usage of a custom &lt;code&gt;rendezvous&lt;/code&gt;: we will simply override the system call to give control to the desired scheduler.&lt;/p&gt;

</description>
      <category>computerscience</category>
      <category>showdev</category>
    </item>
    <item>
      <title>The Intelligent Symbiosis</title>
      <dc:creator>Giacomo Tesio</dc:creator>
      <pubDate>Mon, 15 Oct 2018 16:30:06 +0000</pubDate>
      <link>https://forem.com/shamar/the-intelligent-symbiosis-5e6e</link>
      <guid>https://forem.com/shamar/the-intelligent-symbiosis-5e6e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a translated (and polished) transcript of &lt;a href="http://www.radioradicale.it/scheda/553800/iframe?i=3892905" rel="noopener noreferrer"&gt;my talk&lt;/a&gt; (slides &lt;a href="http://www.tesio.it/talks/ai/2018_Milano_La-Simbiosi-Intelligente.pdf" rel="noopener noreferrer"&gt;here&lt;/a&gt;) at the XV Congress of the Association Luca Coscioni about Research Freedom.&lt;br&gt;This is a cross post for my followers here: &lt;a href="http://www.tesio.it/2018/10/06/the-intelligent-symbiosis.html" rel="noopener noreferrer"&gt;this is the canonical URI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Good evening, my name Giacomo, I'm a programmer and I will try to share here a more practical perspective on these matters. I will talk about &lt;a href="http://groups.csail.mit.edu/medg/people/psz/Licklider.html" rel="noopener noreferrer"&gt;the symbiosis between humans and machines&lt;/a&gt;, trying to envision a path that can move us forward into this direction.&lt;/p&gt;

&lt;h1&gt;
  
  
  A new specie
&lt;/h1&gt;

&lt;p&gt;Let's start with a definition of Artificial Intellingence &lt;a href="https://plato.stanford.edu/entries/artificial-intelligence/" rel="noopener noreferrer"&gt;from the University of Stanford&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Artificial  intelligence  (AI) is the field  devoted to &lt;strong&gt;building artificial animals&lt;/strong&gt; (or at least artificial  creatures that – in suitable  contexts – appear to be animals) and, for many, &lt;strong&gt;artificial persons&lt;/strong&gt; (or at least artificial  creatures that – in suitable  contexts – appear to be persons).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, if we introduce a new specie into an ecosystem, be it artificial or not, we break its dynamic equilibrium with few possible outcomes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the extinction of the new specie, refused by the ecosystem&lt;/li&gt;
&lt;li&gt;an articulation of the &lt;a href="https://en.wikipedia.org/wiki/Food_web" rel="noopener noreferrer"&gt;food web&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;the destruction of the ecosystem itself&lt;/li&gt;
&lt;li&gt;the establishment of a &lt;a href="https://en.wikipedia.org/wiki/Symbiosis" rel="noopener noreferrer"&gt;symbiotic relationship&lt;/a&gt; among the new specie and a resident one.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We can surely exclude the first outcome, since we are here talking about Artificial Intelligences that are taking off. But we can also exclude the articulation of the food web by looking at the metabolism of Artificial Intelligences that is based on data:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;data collected by &lt;strong&gt;specialized infrastructures&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;provided to AIs in INPUT&lt;/li&gt;
&lt;li&gt;transformed by such AI&lt;/li&gt;
&lt;li&gt;returned from the AIs in OUTPUT&lt;/li&gt;
&lt;li&gt;and then fed to other AIs&lt;/li&gt;
&lt;li&gt;or &lt;strong&gt;turned into informations&lt;/strong&gt; by humans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can thus see at least three phases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Eating&lt;/li&gt;
&lt;li&gt;Defecation&lt;/li&gt;
&lt;li&gt;Interpretation (of the excrements :-D)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;which is a little magical, it's always arbitrary, since it's up to humans.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Data are just representations of information.&lt;br&gt;Information belong to human minds.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;But where do these data come from?&lt;/p&gt;

&lt;h2&gt;
  
  
  Feeding Artificial Intelligences
&lt;/h2&gt;

&lt;p&gt;To understand this I suggest you to look at this except from a wikipedia page. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0yy5avzycma33vx2j9p1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0yy5avzycma33vx2j9p1.png" alt="An except from wikipedia with a link in a footnote"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a footnote it has a link to a primary source.&lt;br&gt;By clicking such link we spread at the very least 10 personal informations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F4slh4mbsafi623di8iqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F4slh4mbsafi623di8iqp.png" alt="The minimum amount of personal informations that a single click spread"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some informations are cultural, some are medical, some are geopolitical and some are economical, since if you are browsing from the last iPhone you probably have different wealth then if you browse Wikipedia from a library's PC.&lt;/p&gt;

&lt;p&gt;Note that this is the bare minimum: with the default browser configuration, you spread a lot more infos. And this is just &lt;strong&gt;one&lt;/strong&gt; click: you can't even imagine how many precious medical infos you spread by playing an online casual game!&lt;/p&gt;

&lt;p&gt;However this data are what AI eat, every day, without any interaction with the &lt;a href="https://en.wikipedia.org/wiki/Carbon_cycle" rel="noopener noreferrer"&gt;carbon cycle&lt;/a&gt;: they are neither prey nor predator for other species.&lt;/p&gt;

&lt;p&gt;Thus we are left with two possible outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the destruction of the ecosystem&lt;/li&gt;
&lt;li&gt;the symbiosis&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is: we can either go to &lt;a href="https://en.wikipedia.org/wiki/The_Terminator" rel="noopener noreferrer"&gt;Terminator&lt;/a&gt;... or to &lt;a href="https://en.wikipedia.org/wiki/WALL-E" rel="noopener noreferrer"&gt;WALL-E&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Artificial... Politics.
&lt;/h1&gt;

&lt;p&gt;Sadly, this year excluding the Terminator outcome became harder since, on March, an artificial intelligence from Uber killed a 49 years old woman in Arizona.&lt;/p&gt;

&lt;p&gt;Nobody went to jail.&lt;br&gt;Not even the car, that had perceived Elaine Herzberg but it didn't break anyway.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does it means?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Singularity!
&lt;/h2&gt;

&lt;p&gt;We have two possible interpretations of this fact.&lt;/p&gt;

&lt;p&gt;The first is that we have reached the Singularity: the machine asserts its superiority by killing a citizen of the greatest military power of the planet.&lt;/p&gt;

&lt;p&gt;Please note the political acumen of this intelligence: while AI are said to reproduce human bias, it killed a white woman in the states; but to avoid a popular uprising it killed a homeless, a poor, a woman that was not relevant in the capitalist economy that stay at the core of the values of that nation.&lt;/p&gt;

&lt;p&gt;This way the car was able to establish a precedent, with a clear message: "it's allowed to sacrify human lifes to progress; it's fine to kill people to facilitate the evolution of my specie".&lt;/p&gt;

&lt;p&gt;A &lt;a href="https://medium.com/@giacomo_59737/yet-another-definition-of-intelligence-9bbaaa73086d" rel="noopener noreferrer"&gt;super intelligence&lt;/a&gt;, as you can see.&lt;/p&gt;

&lt;p&gt;But there is another explanation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hype-Driven Politics
&lt;/h2&gt;

&lt;p&gt;That simulator shouldn't have been driving a 2 tons car in a road open to public transit. Indeed Uber's engineers explained that &lt;a href="https://www.ntsb.gov/investigations/AccidentReports/Reports/HWY18MH010-prelim.pdf" rel="noopener noreferrer"&gt;the car was configured to avoid emergency braking maneuvers&lt;/a&gt; while the vehicle is under computer control, "to reduce the potential for erratic vehicle behavior".&lt;br&gt;&lt;strong&gt;The car didn't break to avoid car sickness to Uber's customers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So Elaine wasn't killed for progress, but &lt;strong&gt;for Uber's profit&lt;/strong&gt;!&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;Teaching ethics to machines is like teaching sex to condoms.&lt;br&gt;I'd focus on humans, first.&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;And this is relevant to because Uber was invited to test a technology totally inadequated to the complexity it had to face, by an ignorant Governor.&lt;/p&gt;

&lt;p&gt;But a Governor whose ignorance is pretty mainstream.&lt;/p&gt;

&lt;h1&gt;
  
  
  A misleading language
&lt;/h1&gt;

&lt;p&gt;The language we use to describe reality forges our understanding of it.&lt;/p&gt;

&lt;p&gt;Thus when we use words like "intelligence", "learning", "training" and even "neural networks", we evoke human experiences, things that are deep in our consciuosness, but that have &lt;strong&gt;NOTHING&lt;/strong&gt; to do with that happens inside these software.&lt;/p&gt;

&lt;p&gt;This language is great for science-fiction, but it sucks at science.&lt;/p&gt;

&lt;p&gt;It would be easy to adopt a more descriptive technical language, a less anthropomorphic one, but we prefer to easily get funds out of fantasies than to really understand what we are searching with those funds.&lt;br&gt;After all, the more it takes to find it, the more funds!&lt;/p&gt;

&lt;h1&gt;
  
  
  Robot means slave!
&lt;/h1&gt;

&lt;p&gt;However this incident let us exclude the Terminator outcome.&lt;/p&gt;

&lt;p&gt;It proves that, even when a machine kills autonomously, it kills after a human choice. A human decided that Elaine life was worth less than Uber profit.&lt;/p&gt;

&lt;p&gt;So even when we will be able to build autonomous weapons, they won't destroy the planet. They won't destroy the ecosystem. At all!&lt;br&gt;They will just thin out humanity of the exceding 99 percent!&lt;/p&gt;

&lt;h1&gt;
  
  
  Symbiosis
&lt;/h1&gt;

&lt;p&gt;So we are left with a single possible outcome: &lt;a href="http://groups.csail.mit.edu/medg/people/psz/Licklider.html" rel="noopener noreferrer"&gt;human-machine symbiosis&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But what is symbiosis?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An intimate association, often &lt;strong&gt;obliged&lt;/strong&gt;, between members of different species, that usually lead to a &lt;strong&gt;coevolution&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's a long process, &lt;strong&gt;started by single individuals&lt;/strong&gt; of the original species that gain an evolutive advantage over the populations they come from.&lt;/p&gt;

&lt;p&gt;Thus we should ask ourselves: who shall inherit the Earth? Who will join this coevolution?&lt;/p&gt;

&lt;p&gt;The smart phones into your pockets can make you think you are part of these chosen people, but I have to disappoint you. To raise artificial intelligences you need to control data. You do not control the data about you.&lt;/p&gt;

&lt;p&gt;Companies like Google, Amazon, Facebook, Apple, Microsoft and Uber hold your data.&lt;/p&gt;

&lt;p&gt;Now, somebody will say that these company cannot do evil, and that the interdependencies produced by the global market will protect all of us from destructive practices.&lt;/p&gt;

&lt;h1&gt;
  
  
  The market protection
&lt;/h1&gt;

&lt;p&gt;To reason about this objection I propose you to consider the browsers that serve over 90% of the market: Google Chrome, Mozilla Firefox, Microsoft Edge and Apple Safari.&lt;/p&gt;

&lt;p&gt;These browsers are the primary milking tools... I mean... the primary tools to collect users' data. They are distributed for free, but funded or developed by the companies. But through these software any website you visit can &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://rain-1.github.io/in-browser-localhostdiscovery" rel="noopener noreferrer"&gt;tunnel into your private network&lt;/a&gt;, wherever you work, in an hospital, in a bank, in a military base, in Parliament... wherever!&lt;/li&gt;
&lt;li&gt;put illegal contents into your device without you knowing it&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;and &lt;a href="http://www.tesio.it/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html#c_i5j37u" rel="noopener noreferrer"&gt;several other attacks&lt;/a&gt; that would be too long to describe here.&lt;/p&gt;

&lt;p&gt;These attacks are possible by decades but &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1487081" rel="noopener noreferrer"&gt;they have been reported a month ago&lt;/a&gt; to these organizations. Still you do not know about them because they closed the security report saying that they cannot fix them. &lt;/p&gt;

&lt;p&gt;This is false: in that same bug report, I suggested few simple expedients, pretty easy to implement, that would largerly reduce the attack surface.&lt;br&gt;
The problem is that one of these expedients is to make JavaScript execution opt-in (as Flash was) and JavaScript is fundamental to the business model of tons of companies in the Silicon Valley. &lt;/p&gt;

&lt;p&gt;This shows that the &lt;a href="https://en.wikipedia.org/wiki/Invisible_hand" rel="noopener noreferrer"&gt;invisible hand&lt;/a&gt; do not protect us from ignorance.&lt;br&gt;&lt;br&gt;
These companies did not inform their users, they did not inform you.&lt;/p&gt;

&lt;p&gt;We have to understand that the market do not work whenever we have information asymmetry!&lt;/p&gt;

&lt;p&gt;Understanding the geopolitical hazard, &lt;strong&gt;China&lt;/strong&gt; decided to compete on the same ground, creating several big companies in robotics, face recognition and artificial intelligence in general that are slowly taking huge market shares.&lt;/p&gt;

&lt;h1&gt;
  
  
  What about Europe?
&lt;/h1&gt;

&lt;p&gt;Obviously, Europe could start competing on the market too: Macron already proposed France for this race and others will follow.&lt;/p&gt;

&lt;p&gt;But I think there are other terrains where Europe, with its complex history, have a real advantage, such as&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;the &lt;strong&gt;Principles&lt;/strong&gt; and the Laws that stem from such principles, such as:

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reponsibility&lt;/strong&gt; that must always be held by identifiable humans, particularly when the machines fail&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Algorithmic transparency&lt;/strong&gt; that should always be total and absolute when AI are applied to humans&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;the Research that such Principles could inspire(and such Laws incentivate)

&lt;ul&gt;
&lt;li&gt;new AI algorithms that can grant the total transparency (without just pretending to)&lt;/li&gt;
&lt;li&gt;new language, that would not fool people&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;the Culture, through the study of History and Informatics&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Symbiosis is a Coevolution
&lt;/h1&gt;

&lt;p&gt;If Symbiosis is a coevolution process, we have to evolve too, we need our collective intelligence to evolve. To this goal we usually use Education.&lt;/p&gt;

&lt;p&gt;Today Informatics is what Writing was 5000 years ago: a tool which is totally primitive (nothing we have built in the last 100 years will last!), but an effective tool to collect and retain Power among humans exactly because it is primitive.&lt;/p&gt;

&lt;h1&gt;
  
  
  But who own such Power?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fichef.bbci.co.uk%2Fnews%2F624%2Fcpsprodpb%2F108EF%2Fproduction%2F_102932876_whatsubject.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fichef.bbci.co.uk%2Fnews%2F624%2Fcpsprodpb%2F108EF%2Fproduction%2F_102932876_whatsubject.jpg" alt="Audrey Jones at DefCon 2018"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is Audrey Jones. She is 11 years old and she hacked &lt;a href="https://www.bbc.com/news/technology-45154903" rel="noopener noreferrer"&gt;the electronic election system of the United States of America&lt;/a&gt;. In 10 minutes. How is this possible?&lt;/p&gt;

&lt;p&gt;Randall Munroe explain part of the problem with &lt;a href="https://xkcd.com/2030/" rel="noopener noreferrer"&gt;this wonderful strip&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimgs.xkcd.com%2Fcomics%2Fvoting_software.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimgs.xkcd.com%2Fcomics%2Fvoting_software.png" alt="There are lots of very smart people doing fascinating work on cryptographic voting protocols. We should be funding and encouraging them, and doing all our elections with paper ballots until everyone currently working in that field has retired."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Our entire field is bad at what we do, and if you rely on us, everyone will die.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;(and NO, the blockchain is not the solution, it's a symptom of the problem)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;But there is another aspect of this story that is even more important.&lt;/p&gt;

&lt;p&gt;Audrey Jones can&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;write&lt;/li&gt;
&lt;li&gt;count&lt;/li&gt;
&lt;li&gt;program&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;which are all &lt;strong&gt;preconditions of a true citizenship&lt;/strong&gt; in the world we live in.&lt;/p&gt;

&lt;p&gt;And computers are easy! A SQL injection is a trivial attack: the fact that you cannot do it doesn't mean that it's difficult, just that you don't know how to do it! Audrey can do it, and she is eleven!&lt;/p&gt;

&lt;p&gt;Audrey Jones has&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Curiosity&lt;/li&gt;
&lt;li&gt;Fantasy&lt;/li&gt;
&lt;li&gt;and the &lt;strong&gt;Cultural tools&lt;/strong&gt; to build the infrastructure of the world she desires!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Europe need to raise a generation of &lt;strong&gt;hackers&lt;/strong&gt; like Audrey!&lt;br&gt;A generation that will produce Politicians that understand the cybernetic democracy we live in!&lt;br&gt;We cannot teach to Politicians how computers work: it must be part of their background from the primary school!&lt;/p&gt;

&lt;p&gt;Because, to be honest, people like me will always be able to fool you. But we can't fool Audrey... she knows best!&lt;/p&gt;

&lt;p&gt;Audrey shows us that we can only be either Hackers or (biological) Robots, either Citizens or Slaves, because (let's be clear on this) if a software can affect the elections of a Nation, it means that &lt;strong&gt;you are the robots&lt;/strong&gt;!&lt;br&gt;You that believe you are using the software, while &lt;strong&gt;you are being used by the software&lt;/strong&gt; because you don't know how it works.&lt;/p&gt;

&lt;p&gt;We do not have to teach our sons to &lt;strong&gt;use&lt;/strong&gt; computers, we have to teach them how to &lt;strong&gt;create&lt;/strong&gt; with computers. So that they can build the world they want. A world we cannot even imagine but that we should prepare them to live in anyway.&lt;/p&gt;

&lt;p&gt;We must put servers in every house, mail servers... web servers...&lt;/p&gt;

&lt;p&gt;And we must start to teach &lt;strong&gt;History&lt;/strong&gt; and &lt;strong&gt;Informatics&lt;/strong&gt; at school. Seriously!&lt;/p&gt;

&lt;p&gt;It is the only option we have, &lt;a href="https://en.wikipedia.org/wiki/Microchip_implant_(human)" rel="noopener noreferrer"&gt;not to put chips under skin&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This is the Symbiosis we need: &lt;strong&gt;to know how to create the Future&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>security</category>
      <category>education</category>
    </item>
    <item>
      <title>I have been banned from Lobste.rs, ask me anything.</title>
      <dc:creator>Giacomo Tesio</dc:creator>
      <pubDate>Tue, 11 Sep 2018 19:37:00 +0000</pubDate>
      <link>https://forem.com/shamar/i-have-been-banned-from-lobsters-ask-me-anything-5041</link>
      <guid>https://forem.com/shamar/i-have-been-banned-from-lobsters-ask-me-anything-5041</guid>
      <description>&lt;p&gt;Let me start by saying that &lt;a href="https://lobste.rs" rel="noopener noreferrer"&gt;Lobste.rs&lt;/a&gt; is a &lt;strong&gt;great community&lt;/strong&gt; that I enjoined for more than an year. Several very smart guys hungs there, and I got great conversations with them about operating system design, programming languages, artificial intelligence and machine learning, security, privacy and so on.&lt;/p&gt;

&lt;p&gt;I also tried to be a constructive member of such community, &lt;a href="https://lobste.rs/newest/Shamar" rel="noopener noreferrer"&gt;posting there interesting documents&lt;/a&gt; I came across.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; In the url above the two submission marked as "&lt;strong&gt;[Story removed by original submitter]&lt;/strong&gt;" have been removed by the administrator after my ban.  &lt;/p&gt;

&lt;p&gt;I didn't remove them. &lt;strong&gt;I have nothing to hide.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One was &lt;a href="https://dev.to/shamar/the-meltdown-of-the-web-4p1m"&gt;my recent article documenting an exploit&lt;/a&gt; that let any website you visit to tunnel into your private network (bypassing many corporate firewalls and proxies).&lt;/p&gt;

&lt;p&gt;The other was &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1487081" rel="noopener noreferrer"&gt;the related bug report that I wrote to Mozilla&lt;/a&gt; (than reported &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/ChromiumBug879381.html" rel="noopener noreferrer"&gt;to Chromium too&lt;/a&gt;) before disclosing such Proof-of-concept exploit.&lt;/p&gt;

&lt;p&gt;Something went wrong after these submissions, because despite the fact Lobste.rs was suggested by a &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1487081#c3" rel="noopener noreferrer"&gt;Mozilla Security developer&lt;/a&gt; as a place to continue the discussion about the HTTP/JavaScript vulnerability I reported, nobody answered to my question "&lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html#c_i5j37u" rel="noopener noreferrer"&gt;are Firefox users vulnerable to this wide class of attacks?&lt;/a&gt;".&lt;/p&gt;

&lt;p&gt;Yet I got downvoted so much that an administrator (after writing me on August 30 for the first time) decided that I do not suit to the community's culture.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://lobste.rs/u/Shamar" rel="noopener noreferrer"&gt;official reason of the ban&lt;/a&gt; was: "Constant antagonstic behavior and no hope for improvement".&lt;/p&gt;

&lt;p&gt;Now let's be clear, I'm fine with &lt;a href="https://lobste.rs/u/pushcx" rel="noopener noreferrer"&gt;Peter&lt;/a&gt;'s decision, even if I don't agree with it. &lt;strong&gt;Your server, your rules&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;But I think that my ban is a very nice example of &lt;strong&gt;Statistics misuse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Indeed, since the first private message I got from Peter, he asked me to explain why I was downvoted 18 (and later 22) standard deviations more than the average.&lt;/p&gt;

&lt;p&gt;Note, I was also upvoted enough to get a positive ranking on most of my comments and posts, but he was &lt;strong&gt;just&lt;/strong&gt; looking to the downvotes, in isolation.&lt;/p&gt;

&lt;p&gt;As one who knows &lt;a href="https://www.horace.org/blog/wp-content/uploads/2012/05/How-to-Lie-With-Statistics-1954-Huff.pdf" rel="noopener noreferrer"&gt;how to lie with statistics&lt;/a&gt; this was a bit of a smell, but since my private explanations were not enough &lt;a href="https://lobste.rs/s/pnfmzr/google_certbot_letsencrypt#c_o2zvx2" rel="noopener noreferrer"&gt;I carefully explained&lt;/a&gt; how most of those downvotes did not complied with the Lobste.rs own guideline about downvotes (sorry, due to the downvotes, you have to expand &lt;a href="https://lobste.rs/s/pnfmzr/google_certbot_letsencrypt#c_s8oksi" rel="noopener noreferrer"&gt;this comment&lt;/a&gt; to see the &lt;a href="https://lobste.rs/s/pnfmzr/google_certbot_letsencrypt#c_o2zvx2" rel="noopener noreferrer"&gt;explaination&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;To get a clue about my bad behavior &lt;a href="https://lobste.rs/threads/Shamar" rel="noopener noreferrer"&gt;you can give a look to my recent comments on Lobste.rs&lt;/a&gt; (some of the comments have been censored, but Peter has kindly sent me a CSV containing a full export from the DB).&lt;/p&gt;

&lt;p&gt;Here some examples of the missing contents (beware, 18+ only! :-D):&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;I feel very uneasy about the safe browsing thing. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For most people (those using WHATWG browsers like &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1487081" rel="noopener noreferrer"&gt;Firefox&lt;/a&gt;, &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/ChromiumBug879381.html" rel="noopener noreferrer"&gt;Chromium&lt;/a&gt;, IE/Edge and derived such as &lt;a href="https://www.torproject.org/docs/faq.html.en#TBBJavaScriptEnabled" rel="noopener noreferrer"&gt;Tor Browser&lt;/a&gt;, Safari or Google Chrome) &lt;a href="https://dev.to/shamar/the-meltdown-of-the-web-4p1m"&gt;there is not such a thing like "safe browsing"&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I mean: if any website you visit can enter your private network or check in your cache if you visited a certain page... or upload illegal contents into your hard disk... calling it safe is rather misleading!&lt;/p&gt;

&lt;p&gt;HTTPS protects users by certain threats, by reducing the number of potential attackers to CA and those who have access to certificates (which is a varying and large number of people anyway, if you consider CDN or custom CA you might have to install on your work pc).&lt;/p&gt;

&lt;p&gt;As for this being anticompetitive... maybe.&lt;/p&gt;

&lt;p&gt;But some of the issues here are rooted in Copyright protection, so... it might just be one of the many problems of a legal system designed before information technology.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://lobste.rs/threads/Shamar#c_s8oksi" rel="noopener noreferrer"&gt;&lt;code&gt;see in context here&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: &lt;strong&gt;every browser&lt;/strong&gt; executing JavaScript and honouring HTTP cache controls headers is equally vulnerable.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://lobste.rs/threads/Shamar#c_qtjegw" rel="noopener noreferrer"&gt;&lt;code&gt;see in context here&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I'm seriously concerned by this &lt;strong&gt;attitude&lt;/strong&gt; among IT people.&lt;br&gt;&lt;br&gt;
My question is simple and have a boolean answer. &lt;/p&gt;

&lt;p&gt;Are the &lt;strong&gt;attacks&lt;/strong&gt; described in the bug report possible, or not?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://lobste.rs/threads/Shamar#c_22ksxd" rel="noopener noreferrer"&gt;&lt;code&gt;see in context here&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Okay, I’ll bite.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;+1! I'm Italian! I'm very tasty! ;-)&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Bugzilla is not a discussion forum. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Indeed this is a bug report.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;Ah, here’s where we disagree. I understand that a bug is an ambiguous concept. This is why we have our Bugzilla etiquette, which also contains a link to Mozilla’s bug writing guidelines.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;I'm pretty serious with netiquette, and I checked your before writing the report.  &lt;/p&gt;

&lt;p&gt;I'm &lt;strong&gt;very sorry&lt;/strong&gt; if I violated one of your etiquette rule, but honestly &lt;a href="https://bugzilla.mozilla.org/page.cgi?id=etiquette.html" rel="noopener noreferrer"&gt;I cannot see which one&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Even about &lt;a href="https://developer.mozilla.org/en-US/docs/Mozilla/QA/Bug_writing_guidelines" rel="noopener noreferrer"&gt;Bug writing&lt;/a&gt; I tried my best, what exactly I got wrong? &lt;/p&gt;

&lt;p&gt;Note that this is not a single RCE, but a whole category of them.  &lt;/p&gt;

&lt;p&gt;And the problem are not just the JavaScript attacks themselves, but the fact that &lt;strong&gt;they can remove all evidences&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Furthermore, what you seek to discuss is not specific to Mozilla or Firefox. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;True. Several other browsers are affected too, but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;This doesn’t means that it’s not a bug in Firefox&lt;/li&gt;
&lt;li&gt;As a browser “built for people, not for profit” I think you are more interested about the topic.&lt;/li&gt;
&lt;/ul&gt;


&lt;/blockquote&gt;

&lt;p&gt;Please elaborate, I am not sure what you mean to imply.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;As a Firefox user (and "evangelist") from version 0.8 I know Mozilla as a brand that cares about people.&lt;/p&gt;

&lt;p&gt;Even the word you used, "people" instead of "users", has always been inspirational to me.&lt;/p&gt;

&lt;p&gt;Now, the issue here is specifically dangerous because not all &lt;strong&gt;people&lt;/strong&gt; live under the same law.  &lt;/p&gt;

&lt;p&gt;Thus I think (and hope) that &lt;strong&gt;Mozilla is more interested to the safety of such people&lt;/strong&gt; than other browser vendors that are led by profit.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I agree with what @&lt;a href="mailto:callahad@wandering.shop"&gt;callahad@wandering.shop&lt;/a&gt; says right away: If you browse to a website. It gives you JavaScript. The browser executes it. That’s by design! Nowadays, the web is specified by W3C and WHATWG as an application platform. You have to accept that the web is not about hyper*text* anymore.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I worked (and still work) on such application platform for 20 years, I think I have understood that pretty well.&lt;/p&gt;

&lt;p&gt;The point is if such application platform is &lt;strong&gt;broken at design level&lt;/strong&gt; or not.&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is not a bug in Firefox. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Are you saying that these attacks are not possible?&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;I am saying that this is not specific to Firefox, but inherent to the browser as a concept.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;Sorry if I ask it again, but I'm pretty dumb.&lt;/p&gt;

&lt;p&gt;Are the attacks described in the &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1487081" rel="noopener noreferrer"&gt;bug report&lt;/a&gt; possible in Firefox, or not?&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://lobste.rs/threads/Shamar#c_hd61dm" rel="noopener noreferrer"&gt;&lt;code&gt;see in context here&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a just a sampling but if you find other censored contents that you are curious about feel free to ask.&lt;/p&gt;




&lt;p&gt;Now, I still think that Lobste.rs is a great technical community and you should really join them. And even Peter is a good administrator: he just did an error.&lt;/p&gt;

&lt;p&gt;But I'm a Data Science hobbyist myself, so feel free to ask me how an actual troll could fool such metric by downvoting others. Or why if you do not care about Internet points (and do not try to maximize them), you will obviously loose a lot of them. &lt;/p&gt;

&lt;p&gt;Or well... ask me anything else! :-D&lt;/p&gt;

&lt;p&gt;I'm not from Mozilla Security.&lt;/p&gt;

&lt;p&gt;I will answer. I'm a hacker.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.mastodon.social%2Fmedia_attachments%2Ffiles%2F006%2F053%2F256%2Foriginal%2F0e2a898b01052765.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Ffiles.mastodon.social%2Fmedia_attachments%2Ffiles%2F006%2F053%2F256%2Foriginal%2F0e2a898b01052765.jpeg"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ama</category>
      <category>security</category>
      <category>opensource</category>
      <category>javascript</category>
    </item>
    <item>
      <title>The Meltdown of the Web.</title>
      <dc:creator>Giacomo Tesio</dc:creator>
      <pubDate>Mon, 03 Sep 2018 11:00:08 +0000</pubDate>
      <link>https://forem.com/shamar/the-meltdown-of-the-web-4p1m</link>
      <guid>https://forem.com/shamar/the-meltdown-of-the-web-4p1m</guid>
      <description>&lt;p&gt;As &lt;a href="https://twitter.com/BrucePerens/status/1035654154939641856"&gt;Bruce Perens recently put it&lt;/a&gt;, I'm "just a programmer".&lt;br&gt;&lt;br&gt;
A &lt;a href="https://www.cs.utexas.edu/~EWD/transcriptions/EWD03xx/EWD340.html"&gt;humble programmer&lt;/a&gt;. And a self-taught one.&lt;/p&gt;

&lt;p&gt;A programmer that has learned how to program from a weird group of people whose core value is &lt;strong&gt;curiosity&lt;/strong&gt;: the &lt;strong&gt;hackers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So when I see a &lt;strong&gt;security hole&lt;/strong&gt; affecting in various ways &lt;strong&gt;billions of people&lt;/strong&gt;, I behave like a programmer. I try to fix it... or get it fixed. As soon as possible.&lt;/p&gt;

&lt;p&gt;So a mounth ago, I wrote an article explaining how &lt;a href="https://medium.com/@giacomo_59737/the-web-is-still-a-darpa-weapon-31e3c3b032b8"&gt;the Web is still a DARPA weapon&lt;/a&gt; (that sometimes backfire, as the Russiagate shows).&lt;/p&gt;

&lt;p&gt;There I describe two dangerous flawns of the Internet and the Web.&lt;/p&gt;

&lt;p&gt;Once I realized that &lt;strong&gt;most security experts didn't understand the severity of the issue&lt;/strong&gt;, I talked about it with a &lt;a href="https://mastodon.social/@Shamar/100612439781128912"&gt;Mozilla developer&lt;/a&gt; that suggested &lt;a href="https://wandering.shop/@callahad/100621620793416331/embed"&gt;to open an issue to Mozilla&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Thus I spent &lt;a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1487081"&gt;two hours to write a detailed bug report&lt;/a&gt;, but it was soon closed (without saying if the Firefox users are vulnerable to such attacks or not), because&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Bugzilla is not a discussion forum.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;On the suggested Lobste.rs thread (&lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html"&gt;cached here&lt;/a&gt;), I asked if Firefox users are vulnerable to such wide class of attacks (several times) without getting a response.  &lt;/p&gt;

&lt;p&gt;Instead I got several &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html#c_dlubhc"&gt;sarcastic&lt;/a&gt;, &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html#c_p4qxvi"&gt;condescending&lt;/a&gt; and &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html#c_e4xjgu"&gt;even&lt;/a&gt; - &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html#c_2wvw4r"&gt;insulting&lt;/a&gt; - &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/Undetectable_Remote_Arbitrary_Code_Execution_Attacks_through_JavaScript_and_HTTP_headers_trickery__Lobsters.html#c_0y21ub"&gt;comments&lt;/a&gt;.  &lt;/p&gt;

&lt;p&gt;Still, no response to such a simple question. Are Firefox users vulnerable?&lt;/p&gt;

&lt;p&gt;When &lt;a href="https://bugs.chromium.org/p/chromium/issues/detail?id=879381"&gt;I reported the same issue&lt;/a&gt; to Chromium team, &lt;a href="https://shamar.github.io/documents/Mozilla-Bug1487081-Attachments/ChromiumBug879381.html"&gt;it was closed in less than ten minutes with the same tone&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Filing a bug here isn't the way to change web standards no matter how you feel about them.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It worth noticing here that &lt;strong&gt;both Mozilla and Google are WHATWG members&lt;/strong&gt; and they write the &lt;a href="https://whatwg.org/working-mode"&gt;Living Standards&lt;/a&gt; that we are talking about. Living Standards that basically &lt;strong&gt;follow&lt;/strong&gt; the implementations.&lt;/p&gt;

&lt;p&gt;To my money, this means that you have to fix the implementations to fix the standard... but remember, &lt;strong&gt;I'm just a programmer&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;Now, I think I've been very clear about the wide class of attacks that JavaScript opens. When asked to, &lt;a href="https://medium.com/@giacomo_59737/i-compiled-a-detailed-bug-report-for-mozilla-where-i-described-some-of-the-possible-attacks-and-41843f7e84d8"&gt;I even carefully explained how simple is to fix them&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But since &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;this is the Web functioning as designed&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I want you to see &lt;strong&gt;what the Web is designed for&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  PoC of one of the many possible exploits (bypassing corporate firewalls)
&lt;/h1&gt;

&lt;p&gt;Please add a &lt;strong&gt;temporary&lt;/strong&gt; line to your C:\Windows\System32\drivers\etc\hosts containing&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;127.0.0.1 local.jsfiddle.net&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This mimic the control of a DNS from the attacker.&lt;/p&gt;

&lt;p&gt;Then try &lt;a href="http://jsfiddle.net/jgt9sd3e/"&gt;this simple JSFiddle&lt;/a&gt; with a WHATWG browser.&lt;/p&gt;

&lt;p&gt;You can change the port number at line 21 to test for any port on your PC.&lt;/p&gt;

&lt;p&gt;You can change the IP in /etc/host to probe other machines on your LAN.&lt;/p&gt;

&lt;p&gt;JSFiddle (the fictional attacker) has just &lt;strong&gt;bypassed your corporate firewall/proxy&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Everything is broken.
&lt;/h1&gt;

&lt;p&gt;This is just &lt;strong&gt;one&lt;/strong&gt; of the &lt;strong&gt;uncountably many attacks&lt;/strong&gt; you can do this way.&lt;br&gt;&lt;br&gt;
I could go on &lt;strong&gt;hours&lt;/strong&gt; inventing more attacks. And you should be able too.&lt;/p&gt;

&lt;p&gt;EDIT: &lt;a href="https://rain-1.github.io/in-browser-localhostdiscovery"&gt;&lt;code&gt;here you can find another exploit&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As explained in the bug report, you can target a specific person or group.&lt;br&gt;&lt;br&gt;
Even over a CDN (thus through a third party site that the victim trusts).&lt;/p&gt;

&lt;p&gt;And then you can reload an harmless script from the same url, rewriting the cache copy and &lt;strong&gt;removing all evidences of the attack&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It's really just a matter of &lt;strong&gt;compentence&lt;/strong&gt; and &lt;strong&gt;fantasy&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Still I'm not going to find a &lt;a href="http://heartbleed.com/"&gt;cool name&lt;/a&gt; or &lt;a href="https://meltdownattack.com/"&gt;draw puppets&lt;/a&gt; to &lt;a href="https://twitter.com/BrucePerens/status/1035617158984654848"&gt;"evangelize" about it&lt;/a&gt;. I'm a programmer, &lt;strong&gt;not a clown&lt;/strong&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  How can we fix it?
&lt;/h1&gt;

&lt;p&gt;As I explained in the bug report, the &lt;strong&gt;technical solution&lt;/strong&gt; is basically to &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;make users opt-in to program executions&lt;/strong&gt; on a per-website basis&lt;/li&gt;
&lt;li&gt;threat such programs as potentially dangerous&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can read a &lt;a href="https://medium.com/@giacomo_59737/i-compiled-a-detailed-bug-report-for-mozilla-where-i-described-some-of-the-possible-attacks-and-41843f7e84d8"&gt;simple recap with details here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, what you can see here is &lt;strong&gt;how deeply the Web is broken&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This is not (just) about JavaScript.&lt;/p&gt;

&lt;p&gt;This is about &lt;strong&gt;&lt;a href="https://twitter.com/giacomotesio/status/1035908349903163392"&gt;people&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>javascript</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
