On malfunction, mechanisms and malware classification

How can one (efficiently) differentiate between malicious and non-malicious software and how can this be formalized and automated? This is one of many fundamental problems within software engineering which is becoming more acute with society’s increasing reliance on cyber-physical systems. In fact, it is one of many problems in dire need of a deep conceptual and so philosophical analysis, not just for the mere pleasure of defining and classifying, but because such reflections help improving our software. One basic challenge within the security context then is to understand what malicious software is today (indeed, also malware can and should be seen as a historical object) and, so, whether one can identify different types of so-called malware. Existing proposals of taxonomies are too focused on specific details and, hence, system-specific – a generalizing approach is needed. This is the task that Primiero, Solheim and Spring set out for themselves in a recent paper:

“On malfunction, mechanism and malware classification.” Philosophy and Technology, 2018, https://doi.org/10.1007/s13347-018-0334-2, available here.

Starting out from an existing taxonomy, they propose a generalized framework, extending it to intended disruptions of normal software functionality. In a first analysis, the understanding of malware is functionalist, viz. in terms of the damage done (e.g. is the intent of the attack merely to monitor and possible steal data or is it disruptive?). This functionalist understanding is then connected with the use of mechanistic modeling strategies to clarify and, ultimately, facilitate malicious software classifications. Of course, the authors’ ambition is to propose this analysis as a first stepping stone towards provable and verifiable reasoning about malware. We are looking forward to the next steps in this endeavour.

Two published books: Computational artefacts and Routines of substitution

I am very happy to announce the publication of two books from two PROGRAMme members.

The first book is the long-awaited basic book on the philosophy of computer science by Ray Turner. Ray is one of the founders of the philosophy of computer science, both through his efforts within the IACAP community to establish a track on the philosophy of computer science, as well as through his well-known SEP entry on the philosophy of computer science which is now co-authored by Nicola Angius and still available here: https://plato.stanford.edu/entries/computer-science/.

Ray’s book is a great example of how insights from different fields are needed in order to develop a deeper reflection on the computer science field which is of value not just to philosophers but also to the computer science community itself.  The book’s title is “Computational artifacts. Towards a philosophy of computer science”. It refers to Ray’s effort to connect the following fundamental ontological question of computer science which, in the past, as often given rise to a variety of fierce debates on the nature of computer science:

what “are” the “things” of computer science?

with insights from (analytical) philosophy of technology. This allows him to explain and argue from the dual nature of computational objects as having both structural and functional properties. They are technical artefacts. But the analytical framework offered by the philosophy of technology does not suffice to fully capture computational artefacts, but also requires insights from the philosophy of mathematics. More specifically, whereas programs and computations are computational artefacts from the perspective of being physically implemented, the process of constructing a symbolical program from its specification is a rule governed mathematical activity. Bridging the mathematical aspects of computational “things” with their technological side through the relevant philosophies is one of the great achievements of this book. A must-read not just for philosophers but, perhaps, first of all, for computer scientists. A more detailed review will follow later.

The second book that appeared is by philosopher, software engineer and historian Mark Priestley who also wrote the first serious book on the history of computer programs. His latest book titled Routines of substitution. John von Neumann’s work on Software development 1945-1948, engages deeply with the early years of computer programming and, more specifically, with the evolution in von Neumann’s work from 1945-1948 in this context.

It starts out from a detailed analysis of the earliest known example of a routine written by von Neumann, viz. to `mesh’ two sequences of data and intended to be part of the larger program known as mergesort and then broadens its perspective ultimately engaging with the very fundamental and controversial topic of subroutines as discussed by von Neumann an Goldstine in the famous but often not well-read report on flow diagrams and subroutines and considered one of the first texts on computer programming. Rather than following popular myths, both positive and negative, Mark instead made the effort to reread well-known texts and connected them with previously unknown or hardly known texts in order to offer a historical reading of von Neumann’s work in this context put in its proper context. This allows him to develop a more coherent and correct view on von Neumann’s view on the planning and coding of problems. One basic outcome is the central role played by substitution which is something that directly connects von Neumann’s work on programming to a tradition of mathematical logic where the notion of substitution played a central role.

Continue reading

Autumn meeting in Bertinoro: slides

The autumn meeting in Bertinoro was a great and intense meeting — after the workshop, the members of the PROGRAMme group started their collaborations around the different PROGRAMme cluster and also initiated work on a PROGRAMme wiki. Below you can access the slides of some of the talks at the workshop “Formalisms at the interface with machines, languages and systems”.

Thanks to all participants for turning this into a great event! Thanks are also due to Simone Martini who not only proposed Bertinoro as a possible venue but also co-organized the event.

I am also happy to welcome our new member: Wendy Hammache.


Giuseppe Primiero, From Formal Correctness to Engineering Validity

Liesbeth De Mol and Edgar Daylight, Halting problems: a historical reading of a paradigmatic computer science problem

Baptiste Mélès, Unix Ontology: Time and Prime Mover in Unix v6

Felice Cardone, From Curry to Haskell: the logical syntax of programming languages

Gerardo Con Diaz, Machines and Algorithms in American Patent Law

Marie-José Durand-Richard, Towards programming before flowcharts : diagrams from Babbage to Wilkes

Wendy Hammache, Lambda calculus: from logic to computation

Less is more in the fifties: encounters between logical minimalism and computer design during the fifties.

What is the actual effect of advances in mathematical logic from the 1920s and 1930s on the field of computing? A lot has been written and more has been said already of the supposed theoretical foundations of computing and its roots in the logical work of people like Church and Turing. While it is clear that there are important connections, both historically as well as epistemologically, between these developments, it has been shown before that this should not mean that there is a clear one-directional line going from theory into practice (nor conversely) and that the relation between logic, computing machinery and programming practices is a complicated one both historically (e.g. what is the significance of “Turing machines” for the development of the modern computer?) as well as philosophically (e.g. what connects computation with finite combinatory processes and how is this reflected in the control mechanisms for both types of “processes”?). This becomes even more significant in the light of the fragmented nature of the computing field today which seems to lack a more coherent foundational framework.

One specific historical aspect of this issue is investigated in the paper:

L. De Mol, M. Bullynck and E.G. Daylight, Less is more in the fifties: encounters between logical minimalism and computer design during the fifties, IEEE Annals of the History of Computing, vol. 40, issue 1, pp. 19-45, 2018, a version is available here: http://hal.univ-lille3.fr/hal-01345592v3/document

It studies how certain developments in computer design from the 1950s can be embedded into what are called minimalist traditions in mathematical logic and engineering. Both traditions could be termed logical minimalism, meaning the systematic use of (mathematical) logic in designing minimal systems and devices. These forms of logical minimalism were recast into a diversity of computing practices in the 40s and 50s. The logical tradition is part of the more general research programme into the foundations of mathematics and logic that was carried out in the beginning of the 20th century. The engineering tradition then emerged during the 1930s to design relay circuits and is part of a more general trend of using mathematical techniques in engineering. In the 1940s and 1950s, however, these traditions were redefined and appropriated when computer engineers, logicians and mathematicians started searching for 1the small(est) and/or simple(st) machines with an eye on engineering a small and relatively cheap digital computer. Of course, minimalism on one level does not imply overall simplicity, and nearly always, these logically small machines came with tradeoffs, mostly more involved and complex programming and a need for more memory for efficient operation. This paper studies the search for small machines, both physically and logically, and ties it to these older traditions of logical minimalism. Focus is on how the transition of symbolic machines into real computers integrates minimalist philosophies as parts of more complex computer design strategies. It also shows how the name of Alan S. Turing became affiliated with the idea that solving computational problems with machines do not require a series of computing machines of ever higher complexity but that a few operations suffice.

The logic of identity and copy for computational artefacts

What does it mean for two programs to be identical to each other and in what sense can one computational artefact be said to be a copy of another one? This is the fundamental question tackled in the following paper that is now on-line:

Nicola Angius and Giuseppe Primiero, The logic of identity and copy for computational artefacts, Journal of Logic and Computation, https://academic.oup.com/logcom/advance-article-abstract/doi/10.1093/logcom/exy012/4954042

The philosophical problem of identity has a long history which can be traced back to the work of people like Quine, Frege and Martin-Löf. In computing the problem of identity concerns the question when two programs are identical. The approach of this paper is to revisit the computational problem by (re-)connecting it to the more philosophical literature by studying in how far the different identity criteria from philosophy can be re-applied to the problem in the computational setting. The result is the determination and formal definitions using process algebras of several types of identity relations. The issues raised in this paper connect quite naturally to some other fundamental problems that came to the fore during the prelaunch roundtable of PROGRAMme at CNAM such as the questions of copyright; the relative difference between programs and algorithms and issues of simulation (see the report). Looking forward to more results in this direction!

An earlier version of the paper is available here.

Launch event – slides

The launch of the PROGRAMme project was an intense first meeting with some great discussions on a variety of topics. The slides of the talks on wednesday February 7 and thursday February 8 are now available here:

February 7, session of the HEPIC séminaire :

Cliff Jones, A brief history of formal methods
Samuel Goyet, Of Bits and Blocks : a historic and semiotic approach of web Application Programming Interface (APIs)

February 8, Workshop Models between structures and meanings of programs:
(Note that two talks were canceled due to circumstances)

Liesbeth De Mol, Introduction to the project and its members
Mark Priestley, Program structure and its graphical representation c. 1946
Tomas Petricek, The Inner Life of Programming Concepts. Also available here.
Edgar Daylight, Towards a History of Model-Modellee Conflations in Computer Science
Maël Pégny, Are machine learning algorithms programs?
Ray Turner, The Ways of Computational Abstraction

What is a computer program?

Welcome to the site of the ANR research project “What is a program? Historical and philosophical perspectives”. The aim of this project is to develop a coherent analysis and pluralistic understanding of “computer program” and its implications to theory and practice. On this site you can find all relevant information related to the project as well as other news, events and publications that are relevant to the project.

The site is currently under construction given that the project will start on February 1, 2018 but a pre-launch event is already planned on October 20, 2017.

More to follow soon…