WinMX

WinMX er et fildelingsprogram laget av Frontcode. Den første versjonen ble utgitt i 2001. Til å begynne med var WinMX bare en av mange OpenNap klienter, nå baserer WinMX seg på sitt eget desentraliserte nettverk kalt «WinMX Peer Network», ofte forkortet til «WPN».
WinMX er veldig enkelt og brukervennlig, og egner seg bra til å laste ned populær musikk og småfiler, men er ikke like bra for nedlastning av store filer som f.eks. filmer eller spill nå som nyere nettverk som Direct Connect og BitTorrent har tatt mye over.


== WinMXs egenskaper ==
Lar deg laste opp og ned hvilken som helst filtype
Eget desentralisert nettverk (WinMX Peer Network)
Støtter nedlastning fra flere kilder samtidig for å øke nedlastningshastigheten (multi-source)
Fortsettelse av nedlastning av avbrutte filer
Støtter tilkobling til OpenNap-nettverk
Avansert desentralisert chat
Styring og overvåkning av båndbreddebruk
Støtter importering av språkfiler for å få WinMX på et annet språk


== WinMX Peer Network ==


=== Generelt ===
Nettverket er bygget opp på primære og sekundære brukere. Primære brukere holder nettverket sammen, og tar seg av søking, og returnering av søkeresultater seg imellom, og fungerer på samme måte som super-nodes/ultrapeers på gnutella. Man må ha åpne porter i ruter og brannmur, og bredbånd for å være primær bruker. Sekundære brukere kobler seg til primære brukere, og henger passivt på de primære brukerne. Sekundæren sender søkeetterspørsler til den primære brukeren, og den primære brukeren tar seg av søkingen på nettverket. Den primære brukeren returnerer så søkeresultatene til den sekundære brukeren. Brukere med liten båndbredde eller med brannmur/ruter som ikke er konfigurert må være sekundær bruker. 


=== Mellomlagringstjener ===
Man må koble til en mellomlagringstjener man kjenner til, som man så forsøker å koble til. Dette er den eneste sentrale tjeneren på nettverket, og etter man er koblet til, er all trafikk desentralisert. Siden det idag er flere organisasjoner og til og med privatpersoner over hele verden som driver mellomlagringstjenere, kan man si at nettverket er fullstendig desentralisert. 


=== Kryptering ===
WinMX bruker en kryptering som har gjort det vanskelig for programmerere å lage tilleggsprogrammer til WinMX, men som til gjengjeld har holdt plate- og filmindustrien borte fra nettverket lenge, og gjort at de ikke kunne overvåke eller forstyrre nettverket. Deler av krypteringen har blitt knekt, noe som gjør at man nå kan lage enkle klienter som chatteklienter til WinMX, men det gjør også at plate- og filmindustrien får større muligheter til å forstyrre og overvåke enkelte deler av nettverket. 


=== Falske filnavn ===
Plate- og filmindustrien har over lengre tid spredd falske filnavn på nettverket. Når man søker, ser de falske filene ut som vanlige filer, men de kan ikke lastes ned. Dette blir gjort for å prøve å begrense ulovlig nedlastning av opphavsbeskyttede filer. En av fiksene til nettverket kan filtrere vekk disse falske filene ved å bruke en IP-blokkeringsliste. Organisasjonen WinMxWorld oppdaterer listen fortløpende etterhvert som plate- og filmindustrien begynner å spre falske filnavn fra nye IP-adresser. I motsetning til andre fildelingsnettverk har ikke WinMX problemer med filer som bare inneholder ulyd (whitenoise).


== Historien om nedstengingen og gjenopplivingen av nettverket ==


=== Hvordan nettverket ble lagt ned ===
Den 13. september 2005 sendte den amerikanske musikkindustrien RIAA (Recording Industry Association of America) ut en trussel til Frontcode, som resulterte i at Frontcode stengte ned mellomlagringstjenerne sine og websiden winmx.com for godt. Den 25. september, 12 dager senere, ble WinMX-nettverket erklært dødt.
En person som var aktivt medlem av organisasjonen WinMxWorld med kallenavn «King Macro», oftest bare kalt «KM» vurderte om det var mulig å gjenopplive nettverket. Valget sto den gangen mellom å destruere WinMxWorld eller å lage en fiks til WinMX. King Macro bestemte seg for å gjøre et forsøk på å lage en fiks og en ny mellomlagringstjener, og opprettet en ny organisasjon kalt WinMXGroup. Problemet den gangen var at man ikke visste så mye om den primære protokollen i WinMX, og man var derfor ikke sikker på hvordan man skulle la mellomlagringstjeneren formatere og sende ut klientlisten til primære brukere.


=== Utviklingen av mellomlagringstjener ===
Et par dager etter at WinMX-nettverket ble tatt ned, var det en japansk programmerer kalt "Drac" som kom med et verktøy han hadde laget før nettverket ble stengt ned. Programmet kunne simulere en mellomlagringstjener og ble brukt til testing blant japanske programmerere. Programmet hadde i seg selv ingen måte finne IP-adresser til andre noder på nettverket, og man måtte angi disse IP-ene manuelt for å få det til å sende ut en skikkelig klientliste til WinMX. Programmet viste seg å være gull verdt for WinMX-nettverket, fordi programmerere nå kunne se hvordan klientlisten skulle formateres og sendes til WinMX. King Macro utviklet raskt en mellomlagringstjener som kunne håndtere både primære og sekundære brukere, og fikk disse tilkoblet nettverket igjen.
En annen programmerer med kallenavn Ranma programmerte senere en annen peer-cache som ble satt i drift. Nettverket ble da for første gang fullstendig desentralisert siden det var flere personer som drev mellomlagringstjenere uavhengige av hverandre.
For å styrke nettverket enda mer, slapp King Macro en cache-programvare for Windows som hvem som helst kunne laste ned og sette i drift.


=== Utvikling av fiks til WinMX for å få de nye mellomlagringstjenerne i drift ===
De første par dagene etter at nettverket ble tatt ned, ble hosts-filen i windows midlertidig utnyttet til å få WinMX til å ta i bruk de nye mellomlagringstjenerne ved å legge inn vertsnavnene til de gamle frontcode-tjenerne. På denne måten kunne brukere begynne å danne et nytt nettverk.
Imellomtiden utviklet King Macro en permanent løsning til WinMX. Fiksen var en DLL-fil man plasserte i WinMX-mappen. DLL-filen fungerte slik at den satt imellom WinMX og nettverksforbindelsen, og gjorde at når WinMX prøvde å koble til de gamle peercache-tjenerne, tvang DLL-filen WinMX til å koble til de nye mellomlagringstjenerne istedenfor.
Ettersom at alle brukerne av WinMX måtte legge inn den nye fiksen, ble det bestemt at det skulle legges til ekstra sikkerhetsfunksjoner for å styrke nettverket mot hull i den originale WinMX-protokollen. Plate- og filmbransjen hadde over lengre tid før nettverket ble stengt ned spredd falske filer på nettverket som ikke var mulig å laste ned, men som viste seg i søkeresultatene når man søkte etter musikk eller film for å gjøre det vanskeligere å finne de ekte filene. Den viktigste nye fordelen med fiksen, var at den nå kunne filtrere ut de falske filene for godt, og satt plate- og filmbransjen tilbake i tid i deres kamp mot fildeling.


=== Resultatet etter gjenopplivingen ===
Etter at WinMX var på bena igjen med skikkelig fiks og stabile tjenere, ble det beregnet at omtrent 40% av brukerne vendte tilbake til WinMX. Nettverket hadde likevel nok brukere til at det var fullt brukbart og effektivt, og nettverket får flere brukere hver eneste dag. Selv om tapet av 60% av brukerne for enkelte kan høres mye ut, er det ikke aller verst med tanke på at nettverket ble plutselig ble stengt ned over natten uten forvarsel.


== Lukket kildekode ==
På grunn av at kildekoden til WinMX aldri ble sluppet av Frontcode, er det ikke blitt laget en alternativ klient med full støtte for WinMX-nettverket WinMX Peer Network (WPN). Det er også enkelte små mangler og feil i WinMX som ikke kan bli rettet, og enkelte egenskaper og endringer i protokollen som ikke kan bli gjort. Blant annet støtter ikke WinMX eller protokollen overføring av større filer enn 4,294,967,296 byte (4GB). Det er mulig å overføre filer større enn dette, men om filoverføringen blir avbrutt etter denne grensen er nådd, er det ikke mulig å fortsette filen på grunn av at protokollen vil anse filen som ferdig nedlastet. Dette er den største ulempen WinMX har, men programmerere er fortsatt aktive. Det diskuteres mye om det skal lage en ny klient til nettverket, og denne klienten vil i så fall kunne utvikles til å støtte ting den nåværende klienten ikke støtter.


== Eksterne lenker ==