+-----------------------------------------------------------------------------------------------------------------+                                                                                                                                    
                                                                            |                                                        -/+o-  yhyo/::-.``           `--::::/++oo+/-`            |                                                           
                                                                            |            `  /+/`   `:/o+/.             `-oso.  `//-  dMMMN- mMMMMMNNNmmmdmms.     .mNNMMMMMMMMMMNdo:`         |                                                           
                                                                            |        -odmmmdMMM: `+dMMMMMNh:     .-.   .NMMMd` `NMNh:dMMMM/ +MMMMMMMMMMMMMMMd ```../syMMMddmNMMMMMMMd`        |                                                           
                                                                            |      /hNMMMMMMMMM/ sMMMMMMMMMMh-   mNm    NMMMMh``NMMMNNMMMMo -MMM/hMMMMMmmds/odmmmmmmo MMM:`./dMMMMMMm`        |                                                           
                                                                            |    `yMMMMMMMMMMMM+`NMMMMNsdMMMMN+ .MMM-   hMMMMM+-MMMMMMMMMMh  ody yMMMMN.`   dMMMmmmds NMMdhdNMMMMNdo.         |                                                           
                                                                            |    +MMMMMMMNoshso.`MMMMM: `+NMMMM`.MMMh` .mMMMMMy/MMMMMMMMMMM-     dMMMMd    /MMMmhdy-  MMMMMMMMMm+.            |                                                           
                                                                            |    sMMMMMMM:       mMMMM`   hMMMM` dMMMh/mMMMMMMs+MMMmMMMMMMMh     mMMMMs   .NMMMMMMMN..MMMMmmMMMNh+.           |                                                           
                                                                            |    -MMMMMMM`    :sssNMMMy.`:NMMMm  -NMMMMMMMMMMm.oMMM+mMMMMMMM`    NMMMM+   yMMMMMNmho./MMMM+`:smMMMNs-`        |                                                           
                                                                            |     oMMMMMMdsoshmMMh:dMMMNdMMMMh.   /MMMMMMMMMMo dMMM`-NMMMMMM:   `MMMMM-  +MMMMMNhyyhmNMMMN.   `:hMMMMh.       |                                                           
                                                                            |      /mMMMMMMMMMMMMh `:hNNMMNh/      oNMMMMMMm/  dMMh  -dNMMMN:   `mMMMd  `NMMMMMMMMMMMMMNh:       /dMMMm`      |                                                           
                                                                            |       .omMMMMMMNmdm+    .:/:.         :hmNmdo.   .oo-    -yy+-     .omh-  `mMMMMMMMMNNds/.          `omMM+      |                                                           
                                                                            |         `:syys/- ``                     ```                                `/:ohhyo/:.                .+/`      |                                                           
                                                                            |                                                                                                                 |                                                           
                                                                            |                                                                                                                 |                                                           
                                                                            +-----------------------------------------------------------------------------------------------------------------+     
                                                                    
                                                                    

                                                                                                +---------------------------------------------------------------------+
                                                                                                |                            `````              ./syyyso/`            |                                                                           
                                                                                                |                       `:oydmmmmmhyo/-`       /NMMMMMMMMNo`          |                                                                           
                                                                                                |           `---`      :mMMMMMMMMMMMMMMNs`    +MMMMMMMMMMMMm`         |                                                                           
                                                                                                |         /dMMMMMmy:  `MMMMMMMMMMNNmmMMMMm/   hMMMMMMMMMMMMMo         |                                                                           
                                                                                                |       .yMMMMMMMMMMd:.MMMMMMMMN:    `dMMMMo  -MMMMMMd.sMMMM+         |                                                                           
                                                                                                |      `mMMMMMMMMMMMMMsoMMMMMMMy      hMMMM+   /NMMMMm `NMMM.         |                                                                           
                                                                                                |     `dMMMMMMh+/`-NMMMo/mMMMMMNs:.`  `oyo-     .hMMMMdo/yho          |                                                                           
                                                                                                |     hMMMMMMM-    yMMMM-`oNMMMMMMMMNmhs+-`   `--`/dMMMMMm+`          |                                                                           
                                                                                                |    .MMMMMMMM`    hMMMMmmNMMMNMMMMMMMMMMMNy:hNMMNy -oNMMMMNd+`       |                                                                           
                                                                                                |    .MMMMMMMM/   .MMMMMMMMMMMo/sdMMMMMMMMMMMMMMMN/   .hMMMMMMN/      |                                                                           
                                                                                                |     dMMMMMMMNy:-dMMMMMmMMMMMo  ``:+dMMMMMMMMMMMm:    .NMMMMMMM+     |                                                                           
                                                                                                |     .mMMMMMMMMMNMMMMMy.sMMMMd+-.`  oMMMMMMMMMMMMNh/---NMMMMMMMo     |                                                                           
                                                                                                |      .yNMMMMMMMMMMNh:   -ymMMMNNmmdNMMMMMMMmhMMMMMMNNNMMMMMMMN.     |                                                                           
                                                                                                |        .+yhdddhs+:.       `:shmNMMMMMMMMNdo` :hNMMMMMMMMMMMMN/      |                                                                           
                                                                                                |            ```                `..-:::::-.`     .ohmMMMMMMNdo.       |                                                                           
                                                                                                |                                                   .-:///:.`         |                                                                          
                                                                                                +---------------------------------------------------------------------+



.+:::::::::::::::::::::::::::::::::::::::::/
.//`+++++++++++++++++++++++++++++++++++++// s
-+/.h+..................................-os s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h/                                   ss s
-+/.h+                                   ss s
-++-yo////////////////////////////////////y`s
-+o-:--------------------------::::-:://:---s
-+/                            :-.: +:oo-   s
-+/```````````````````````````````````:-````s
./o//////////+o:::::::::::::::::s+/////////::
``://////////+s:::::::::::::::::y+/////////:.
  s                        .::::/osso::::. .+
`.y                        +yyyyhNNNmyyyy+ .+
`:h:::::/+:::::::::::::+:///////////////////+--------------------
 .o                    s s::::::::::::s.+ - +
-/y     .o             s ::::::::::::oss+::.+
`-y     .o             y            `+//:  .+
`.+/y/::/+:::::::::::::+:::::::::::::::::++:.
    `////////////////////////////////////:/.       


    



When I first heard about Jodi, of course I visited the website jodi.org. (There is a lot to discover as shown here (read this first if you don't know them)).

But when you just go to jodi.org, you are redirected to a random one of their pages. I was redirected to http://oss.jodi.org. There was nothing except a black screen, and Firefox told me it had blocked some pop-ups.

I hesitated for a moment, but thought, "Well, it's art. What's going to happen? This probably shows colorful html-ascii stuff" and clicked on allow.

But of course I don't want to spoil and deprive someone of this beautiful experience:

http://oss.jodi.org



                         _            
  __ ___ _ __  _ __ _  _| |_ ___ _ _  
 / _/ _ \ '  \| '_ \ || |  _/ -_) '_| 
 \__\___/_|_|_| .__/\_,_|\__\___|_|   
  _ __  __ _ _|_|                     
 | '  \/ _` | || |                    
 |_|_|_\__,_|\_, |                    
   ___ ___   |__/ ___ _  _            
  / __| _ \  /_\ / __| || |           
 | (__|   / / _ \\__ \ __ |           
  \___|_|_\/_/ \_\___/_||_|           



Glad you're back, if you haven't tried it, here's a quick description:

Nowadays, when a visitor gets to this web page, the browser shows that a pop-up window has been blocked. This is a security feature in modern browsers. It prevents web applications from unintentionally opening multiple windows in the background or manipulating the browser window itself. However, in their work oss.jodi.org, Jodi have done just that, because at the time of publication in 1999, there were no proper protection mechanisms.

The JavaScript code developed by Jodi causes the browser window to first shrink and move to one corner of the screen. Then four more small windows are opened, which change their position on the monitor very quickly and persistently.

If that is not enough, these windows also start jumping around on the monitor. The situation seems to get out of control and any users normal reaction will be to catch these "malicious" windows with the mouse cursor to eliminate them. One is, so to speak, without meaning to and without being prepared for it, caught in an "action game". However, this situation differs from a real computer game in that one has to fear that the computer may crash at any moment. source (translated)

Some visitors to Jodi's website were apparently so shocked to see their computer "crash" that Jodi's Internet provider at the time responded to the complaints by blocking their internet access...

This is an article about oss.jodi.org, written by Tilman Baumgärtel
https://www.heise.de/tp/features/Boeswilliger-Code-3441597.html.

(Translated with www.DeepL.com/Translator (free version)))

Anyone who has looked at the website of the Dutch-Belgian net art duo Jodi (www.jodi.org) in the last few days might have been disappointed: instead of the usual colorful Jodi chaos, there is only a short email on a gray background on the site. The rest of the "work" of the prominent net artists, who among other things participated in documenta X, has completely disappeared for a few days. The reason: the American provider of the website has fired the two artists.

The Internet company "ValueWeb", which "hosts" their entire website (i.e. keeps it available for retrieval on its Internet servers), had written an email to Joan Hemskerk and Dirk Paesmans, the artists behind the notorious site, two weeks ago. It said:

"As you know, one of their WWW pages contains malicious javascript that crashes the browser.... Please remove this page or we will be forced to delete your account with us."

Since then, Jodi have been net artists without a net: they have had to take all their artistic work from the past four years off the Internet.

The bone of contention is the work "OSS." Anyone who enters the WWW address oss.jodi.org into their browser will still experience their blue Internet miracle. "OSS" is the only Jodi work still online, and it does strange things to the browser: The surfing software suddenly seems to take on a life of its own and keeps opening new windows of its own accord, which dance around wildly on the monitor and can hardly be closed again. As "ValueWeb" had correctly recognized, a line of code in the programming language "Javascript" triggers the computer chaos. It doesn't crash the browser, of course, only the surprising duplication. The subdomain oss.jodi.org, however, is not located on the server of "ValueWeb" at all, but on a computer of the Amsterdam net art provider desk.nl.

Although the two artists live in Barcelona, they have set up a large part of their website with the American provider "ValueWeb," because it is cheaper to have an Internet presence there than with the European competition. The fact that the Florida company is now refusing to serve Jodi for technical reasons is a completely new phenomenon. Previously, websites had been shut down because they contained pornography or politically offensive messages - and not because they contained "malicious" Javascript.

In the guestbook that Jodi created on her website, Internet users from all over the world now show solidarity with the artists. "The whole site never crashed my browser. It merely made me laugh," writes one outraged netizen. An Internet company from Israel has even already offered the artist couple to host their entire site for free - out of enthusiasm for Jodi's work. But they only want to bring their site back online piece by piece with a new Internet company. And they wonder why museums and media art institutions are happy to put on a net art exhibition, but don't want to invest in the infrastructure.

We definitely need to investigate that more closely.




   __              _   _           
  / _|_  _ _ _  __| |_(_)___ _ _   
 |  _| || | ' \/ _|  _| / _ \ ' \  
 |_|  \_,_|_||_\__|\__|_\___/_||_| 
   ___  ___ ___  ____              
  / _ \/ __/ __|/ /\ \             
 | (_) \__ \__ \ |  | |            
  \___/|___/___/ |  | |            
                \_\/_/          



Ok, since it is a bit inconvenient to always fight with the windows the page can simply be retrieved with a command line tool. For example curl is good to just display the source code. This will output something like this:

$ curl http://oss.jodi.org

<html><head><meta name=" OSS " CONTENT=" 1.DOWNLOAD "><title> OSS/ </title>
<SCRIPT LANGUAGE="JavaScript"><!--
function OSS(){ 
if(navigator.platform == "MacPPC") {window.location.href="os.html";} 
else if(navigator.platform == "MacIntel") {window.location.href="os.html";} 
else if(navigator.platform == "Win32") {window.location.href="ss.html";} 
else if(navigator.platform == "Win64") {window.location.href="ss.html";} 
else {window.location.href="vv.html";}
}
// --></SCRIPT>
<--- snip --->

You can see "window.location.href=" is pointing to some html pages, so let's get them too.

They consist all more or less of this code:



oss.jodi.org code analysis

But if the pages are only called by curl, the JavaScript is not executed. To interact with the page you need a real browser.




                  _           
  __ ___ _  _ _ _| |_ ___ _ _ 
 / _/ _ \ || | ' \  _/ -_) '_|
 \__\___/\_,_|_||_\__\___|_|  
  / _ \/ __/ __|/ /\ \        
 | (_) \__ \__ \ |  | |       
  \___/|___/___/ |  | |       
                \_\/_/        




If oss.jodi can be seen as a game, then it is about how fast the windows can be turned off again.

When moving pixels on the screen, however, a computer nowadays is faster than people trying to keep up with the mouse.

Therefore, an obvious possibility. Using the computer against itself.

If the browser can be controlled automatically, it can be made to close the windows again.

This works for example by using Selenium. Selenium is a suite of tools for automating web browsers and it can easily be used with python. The code could look like this:

#!/usr/bin/python3

from time import sleep
from selenium import webdriver

driver = webdriver.Firefox()
driver.get("http://oss.jodi.org")

while True:
    sleep(5)
    jodi = driver.window_handles
    if(len(jodi) > 1): print("  [!!!] jodi detected!")
    while(len(jodi) > 1):
    driver.switch_to.window(jodi[len(jodi)-1])
    driver.close()
    print("   [+] stop: "+str(jodi[len(jodi)-1]))
    jodi = driver.window_handles
    sleep(1)

Now the work "oss.jodi.org" can be enjoyed without the disturbing browser windows. Another reading: The two programs fight against each other for all eternity.