VyÜlo v t²denφku: COMPUTERWORLD
╚φslo:7/93
RoΦnφk:1993
Rubrika/kategorie: Co (ne)najdete ve slovnφku

zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek

Ji°φ Peterka

Patch

Ji₧ jednou jsme se na strßnkßch tΘto rubriky zmφnili o starΘ programßtorskΘ moudrosti, kterß pravφ, ₧e v ka₧dΘm programu je chyba. Bylo to v souvislosti s tzv. beta-testy, kterΘ majφ za cφl odhalit co mo₧nß nejvφce chyb jeÜt∞ d°φve, ne₧ se nov² softwarov² produkt dostane do b∞₧nΘho prodeje.

Ani ty nejdokonalejÜφ a nejrozsßhlejÜφ beta-testy vÜak nemohou nikdy dßt stoprocentnφ zßruku bezchybnosti (co₧ by ostatn∞ popφralo platnost naÜφ programßtorskΘ moudrosti). Co pak ale d∞lat s chybami, kterΘ o sob∞ dajφ v∞d∞t a₧ potΘ, kdy se ji₧ nov² program dostal "do sv∞ta"? Jednou z mo₧nostφ je smφ°it se s jejich existencφ a opravit je a₧ v novΘ verzi programu. Zßle₧φ jist∞ na povaze chyb, na strategii dodavatele programu, na frekvenci nov²ch verzφ a na mnoha dalÜφch faktorech.

Obvykle vÜak existuje jeÜt∞ jedna mo₧nost, kterß je ale rozumn∞ pou₧itelnß jen v p°φpad∞ "mal²ch" chyb. Nap°φklad tehdy, je-li chyba v jednΘ jedinΘ strojovΘ instrukci nebo v n∞kolika mßlo instrukcφch Φi n∞kolika mßlo datov²ch bytech a je-li mo₧nΘ tuto chybu opravit zm∞nou pouze t∞chto n∞kolika mßlo instrukcφ Φi byt∙, a nenφ p°itom nutnΘ jakkoli m∞nit cel² zbytek programu. Pak je mo₧nΘ vykonat pot°ebnou opravu p°φmo v k≤du (tj. v binßrnφm tvaru programu) pouh²m p°epsßnφm n∞kolika byt∙ a nenφ nutnΘ znovu p°eklßdat cel² zdrojov² tvar programu. Opravovat p°φmo v k≤du je dokonce mo₧nΘ p°φmo u zßkaznφka, kter² si program n∞kdy d°φve zakoupil - nap°φklad tak, ₧e se mu vhodn²m zp∙sobem sd∞lφ, kterΘ byty a jak²m zp∙sobem opravovat. Nebo se mu poÜle mal² program, kter² tuto zm∞nu provede sßm - co₧ je asi bezpeΦn∞jÜφ pro ob∞ strany.

Pro prßv∞ naznaΦen² mechanismus oprav p°φmo v k≤du mß angliΦtina velmi p°ilΘhav² termφn - patch, kter² v doslovnΘm p°ekladu znamenß "zßplata, nßplast", ale takΘ "zßplatovat, vyspravovat". Pou₧φvß se skuteΦn∞ v obou v²znamech: jako sloveso, vyjad°ujφcφ vlastnφ opravovßnφ v²Üe naznaΦen²m zp∙sobem (nap°. "to patch a piece of code", ve smyslu: vyspravit Φßst k≤du), a zßrove≥ i jako podstatnΘ jmΘno, kterΘ oznaΦuje samotnou "zßplatu", tedy novou hodnotu t∞ch byt∙, kterΘ majφ b²t p°epsßny (nap°. "to distribute a patch to all users", ve smyslu: rozeslat "zßplatu" vÜem u₧ivatel∙m).

Je dobrΘ si zd∙raznit, ₧e prßv∞ naznaΦenΘ "zßplatovßnφ" je realizovßno p°episovßnφm dosavadnφch hodnot n∞kter²ch byt∙ nov²mi hodnotami, a nikoli vklßdßnφm nov²ch byt∙ s tφm, ₧e vÜechny nßsledujφcφ byty by se p°φsluÜn²m zp∙sobem posunuly. Podstatnou vlastnostφ celΘho mechanismu je toti₧ jeho lokßlnφ charakter, tedy realizace ·zce lokalizovan²ch zm∞n, kterΘ nevyvolßvajφ nutnost nßsledn²ch zm∞n v jin²ch Φßstech k≤du. Kdybychom toti₧ vlo₧ili p°φmo do k≤du jeden jedin² "nov²" byte a vÜechny nßsledujφcφ posunuli na adresy o jedniΦku vyÜÜφ, rßzem by bylo nutnΘ zm∞nit vÜechny absolutnφ adresy v celΘm programu. A to nenφ dost dob°e mo₧nΘ (bez novΘho p°ekladu zdrojovΘho tvaru programu).

Proto je dosti zavßd∞jφcφ p°eklßdat anglickΘ "to patch" jako "opravovat vsuvkami" (jak Φinφ nap°. Anglicko-Φesk² v²kladov² slovnφk v²poΦetnφ techniky, SNTL 1990), proto₧e nejde o vsouvßnφ, ale o p°episovßnφ. V∞cn∞ sprßvn∞jÜφ je tedy spφÜe "opravovat p°episovßnφm" Φi "p°episovat p°φmo v k≤du". Ve vhodnΘm kontextu je z°ejm∞ mo₧nΘ pou₧φvat i "zßplatovßnφ" Φi "vyspravovßnφ".

Motivacφ pro "zßplatovßnφ" nemusφ b²t v₧dy jen snaha opravit chybu. P°episovßnφ p°φmo v k≤du je zßrove≥ i jednou z technik, kterΘ pou₧φvajφ r∙znφ "pr∙nikß°i" (hackers). Vhodn²m p°epsßnφm urΦitΘ Φßsti k≤du mohou nap°φklad modifikovat Φi zcela odstranit hlßÜenφ o autorsk²ch prßvech k programu nebo upravit jeho zabezpeΦovacφ mechanismy proti neoprßvn∞nΘmu pou₧itφ (nap°. modifikovat Φßst k≤du pro vyhodnocovßnφ hesel tak, aby ka₧dΘ zadanΘ heslo bylo pova₧ovßno za sprßvnΘ apod).

Existujφ vÜak i "Φist∞jÜφ" motivace. Nap°φklad p°edch∙dce vÜech dneÜnφch editor∙, oblφben² Wordstar, pou₧φval ve sv²ch ran²ch verzφch techniku "zßplatovßnφ", aby mohl sßm sebe p°izp∙sobit konkrΘtnφm vlastnostem monitoru a tiskßrny, kterΘ u₧ivatel m∞l k dispozici. V²robce zve°ejnil adresy, na kter²ch jsou v k≤du jeho editoru ulo₧eny (jako konstanty) °φdicφ sekvence pro ovlßdßnφ tiskßrny a monitoru. Zve°ejnil takΘ p°esn² formßt t∞chto konstant, a u₧ivateli tak dal mo₧nost zm∞nit jejich implicitnφ hodnoty podle pot°eb skuteΦnΘ tiskßrny a skuteΦnΘho monitoru. Dnes se vÜak tento zp∙sob nepou₧φvß, p°edevÜφm pro svou nßroΦnost na znalosti a schopnosti u₧ivatele, kter² si vlastn∞ musel sßm vytvo°it vÜe pot°ebnΘ pro ovlßdßnφ sv²ch konkrΘtnφch periferiφ. Mφsto toho se dnes uplat≥uje spφÜe jinß filozofie - vÜe pot°ebnΘ pro ovlßdßnφ konkrΘtnφho za°φzenφ (nejen tiskßrny Φi monitoru) p°ipravφ ji₧ v²robce a ten u₧ivateli dodß tzv. ovladaΦ (driver) ve form∞ samostatnΘho souboru. Programu, kter² se za°φzenφm pracuje, pak u₧ivatel p°i instalaci pouze urΦφ, kter² ovladaΦ mß pro danΘ za°φzenφ pou₧φt.


zp∞t do archivu Φlßnk∙ | rejst°φk | p°edchozφ Φlßnek | nßsledujφcφ Φlßnek
Tento Φlßnek m∙₧e b²t voln∞ Üφ°en, pokud se tak d∞je pro studijnφ ·Φely, na nev²d∞leΦnΘm zßklad∞ a se zachovßnφm tohoto dov∞tku. Podrobnosti hledejte zde, resp. na adrese http://archiv.czech.net/copyleft.htm