Anthropic i firma Theorem, specjalizująca się w metodach formalnej weryfikacji, informują, że Claude przygotował sprawdzalne maszynowo dowody dla 239 punktów wejścia testów w 123 bibliotekach open source. Dowody obejmują określone właściwości związane z awariami i bezpieczeństwem pamięci w skompilowanych programach RISC-V. Nie potwierdzają, że biblioteki są wolne od wszystkich błędów.
9
5
Skala projektu jest znacząca: według zespołu prace trwały kilka tygodni, a ich efektem było około 180 mln linii dowodów w Rocq. Ważniejsza od samej liczby jest jednak możliwość wykorzystania AI, by objąć formalną weryfikacją więcej rzeczywistego oprogramowania — przy zachowaniu jasnych granic tego, co sprawdzono.
3
13
Co dokładnie potwierdzają dowody
Anthropic podaje, że objęte analizą programy kończą działanie normalnie, bez błędów bezpieczeństwa pamięci i niezaliczonych asercji, dla każdego wejścia krótszego niż 64 MB oraz dla modelowanych odpowiedzi systemu Linux i układów pamięci — przy przyjętych założeniach. Chodzi o skompilowane programy RISC-V, a nie ogólną gwarancję dla każdej wersji biblioteki czy sposobu jej użycia.
9
12
Zespół wykorzystał istniejące punkty wejścia Google OSS-Fuzz jako specyfikacje formalne. OSS-Fuzz to projekt służący do automatycznego testowania oprogramowania open source metodą fuzzingu: program dostaje wiele danych wejściowych, także nietypowych lub losowych, aby sprawdzić, czy ujawnią błąd. Claude nie ograniczył się do testowania kolejnych przypadków — wygenerował dowody dotyczące zachowania określonych programów dla całego zakresu wejść opisanego w twierdzeniu.
3
13
Anthropic określa projekt jako pierwszą dużą próbę wykorzystania AI do formalnej weryfikacji oprogramowania produkcyjnego na poziomie asemblera. To opis nowatorskości podany przez zespół, a nie niezależnie potwierdzony historyczny konsensus.
7
13
Po co sprawdzać dowody maszynowo
Claude wygenerował dowody, a ich poprawność sprawdził kernel Rocq — niewielka część systemu Rocq odpowiedzialna za mechaniczne sprawdzanie dowodów. Dzięki temu nie trzeba po prostu ufać rozumowaniu modelu ani ręcznie czytać każdej linii, by sprawdzić poprawność dowodu. Nadal jednak znaczenie mają założenia formalne: twierdzenie musi opisywać właściwość, na której zależy programistom, a modele i sam mechanizm sprawdzający należą do podstaw, którym trzeba ufać.
9
5
Według Anthropic i innych relacji powstało około 180 mln linii dowodów Rocq, średnio mniej więcej 600 tys. na program. To pokazuje rozmiar przedsięwzięcia, ale sama liczba linii nie przesądza ani o zakresie gwarancji, ani o tym, czy dowód odpowiada potrzebom konkretnego wdrożenia.
3
12
Czego mogły nie wychwycić same testy
Fuzzing sprawdza wiele danych wejściowych, ale sam w sobie nie dowodzi, że program zachowa się poprawnie dla każdego możliwego wejścia w określonym zakresie. Relacje o projekcie mówią, że Claude znalazł i pomógł naprawić setki błędów, w tym takie, które umknęły bilionom uruchomień fuzzingu. Są to liczby podane w opisach tego przedsięwzięcia, a nie niezależny pomiar skuteczności formalnej weryfikacji w innych projektach.
2
11
Wniosek nie brzmi: „zastąpmy testy dowodami”. Dowód formalny dostarcza innego rodzaju informacji: dla określonej właściwości i zakresu może potwierdzić zachowanie programu dla wszystkich wejść spełniających specyfikację, a nie tylko tych, które trafiły do testów.
9
2
Dlaczego „zweryfikowany” nie znaczy „bez błędów”
Gwarancje dotyczą wybranych punktów wejścia i konkretnych skompilowanych programów. Nie obejmują automatycznie wszystkich funkcji biblioteki, konfiguracji kompilacji, architektur ani sposobów użycia.
9
5
Liczą się też warunki wykonania. W relacjach opisano dowody dotyczące jednowątkowych, statycznych programów RISC-V uruchamianych w modelowanym środowisku Linuksa i przy ograniczonej pamięci. Wiele wdrożeń korzysta z innych architektur lub konfiguracji, więc wyników nie należy traktować jako gwarancji dla tych wersji.
12
27
34
Wreszcie dowód potwierdza zapisane twierdzenie, a nie każdą właściwość, której programista mógłby oczekiwać. Poza zakresem mogą pozostać inne błędy, a znaczenie mają także modele formalne i mechanizm sprawdzania dowodów, na których opiera się wynik.
5
31
Co z tego wynika dla programistów
Najważniejszy wniosek z projektu jest taki, że pomoc AI może ułatwić stosowanie formalnej weryfikacji na poziomie asemblera w większej liczbie rzeczywistych projektów. Wyniki nie dają jednak uniwersalnej wyceny kosztów ani gwarancji, że metoda sprawdzi się w dowolnym kodzie.
7
13
Publicznie udostępniono część materiałów z dowodami. Jedna z relacji podaje, że obejmuje ona 25 bibliotek i 60 punktów wejścia, a więc nie cały opisany projekt. Theorem ogłosił także program OSS Verify dla opiekunów projektów open source.
32
16
38
Przed poleganiem na takim dowodzie warto sprawdzić, którego punktu wejścia i artefaktu binarnego dotyczy, jakie przyjmuje założenia i jaką dokładnie właściwość potwierdza. Formalna weryfikacja wspomagana przez LLM może być wartościowym uzupełnieniem testów — ale nie powodem, by z nich rezygnować lub zakładać, że oprogramowanie nie ma błędów.
9
5