diff options
author | W. Kosior <koszko@koszko.org> | 2025-09-19 12:47:44 +0200 |
---|---|---|
committer | W. Kosior <koszko@koszko.org> | 2025-09-19 13:09:45 +0200 |
commit | 7000b1f2bb2fca5b7707c9b1a9f58f43100212d3 (patch) | |
tree | cc5531b93b8e76c39e3c58d52574f68e86c3f05e /presentation.tex | |
download | AGH-msc-thesis-magister.tar.gz AGH-msc-thesis-magister.zip |
Diffstat (limited to 'presentation.tex')
-rw-r--r-- | presentation.tex | 683 |
1 files changed, 683 insertions, 0 deletions
diff --git a/presentation.tex b/presentation.tex new file mode 100644 index 0000000..957f17f --- /dev/null +++ b/presentation.tex @@ -0,0 +1,683 @@ +%% SPDX-License-Identifier: CC0-1.0 +%% +%% Copyright (C) 2024, 2025 Woj. Kosior <koszko@koszko.org> + +\documentclass[ + hyperref={ + hyperfootnotes = false, + pdftex, + colorlinks = true, + linkbordercolor = ., + linkcolor = [rgb]{0,0.2,0}, + urlcolor = [rgb]{0,0,0.5}, + citecolor = [rgb]{0.5,0,0} + } +]{beamer} + +\usepackage{polski} +\usepackage{pgfpages} +\usetheme{Rochester} +\usecolortheme{seagull} +\usepackage{calc} +\usepackage{svg} +\usepackage{graphicx} +\usepackage[export]{adjustbox} +\usepackage{verbatimbox} +\usepackage{listings} +\usepackage{seqsplit} +\usepackage{soul} +\usepackage{substr} +\usepackage{colortbl} +\usepackage{booktabs,tabularx} +\usepackage[normalem]{ulem} + +\setbeamertemplate{navigation symbols}{} +\setbeamertemplate{footline}[frame number] + +\IfSubStringInString{\detokenize{-handouts}}{\jobname}{ + \mode<handout>{\setbeamercolor{background canvas}{bg=black!10}} + \pgfpagesuselayout{2 on 1}[letterpaper,border shrink=5mm] +}{} + +\IfSubStringInString{\detokenize{-onlynotes}}{\jobname}{ + \setbeameroption{show only notes} +}{} + +\IfSubStringInString{\detokenize{-onlyslides}}{\jobname}{ + % nothing +}{} + +\IfSubStringInString{\detokenize{-pympress}}{\jobname}{ + \usepackage{pgfpages} + \setbeameroption{show notes on second screen} +}{} + +\IfSubStringInString{\detokenize{-slidesandnotes}}{\jobname}{ + \setbeameroption{show notes} +}{} + +% https://tex.stackexchange.com/questions/249040/scale-column-of-a-table-in-percentage-of-textwidth#answer-249043 +\newdimen\netTableWidth +\newcommand{\columnsCount}[1]{% + \netTableWidth=\dimexpr + \linewidth + - #1\tabcolsep - #1\tabcolsep + - #1\arrayrulewidth -2\arrayrulewidth + \relax% +} + +\usepackage{tikzpagenodes} +\usetikzlibrary{calc} +\tikzset{frameoverlay/.style={overlay,remember picture,shift={(current page text area.south west)}, +x={($(current page text area.south east)-(current page text area.south west)$)}, +y={($(current page text area.north west)-(current page text area.south west)$)},nodes={anchor=south west}}} + +\newcommand{\logosInHeading}{ + \begin{tikzpicture}[frameoverlay] + \path + (-0.079,1.005) node{ + \includegraphics[ + height=0.5in + ]{Logo-WIET-2021.png} + } + (0.835,0.966) node{ + \includegraphics[ + height=0.7in + ]{agh_idub_pl_cmyk.pdf} + }; + \end{tikzpicture} +} + +\makeatletter +\long\def\beamer@@frametitle[#1]#2{% + \beamer@ifempty{#2}{}{% + \gdef\insertframetitle{\centering{#2\ifnum\beamer@autobreakcount>0 + \relax{}\space\usebeamertemplate*{frametitle continuation}\fi}}% + \gdef\beamer@frametitle{#2}% + \gdef\beamer@shortframetitle{#1}% + \logosInHeading{}% +}% +} +\makeatother + +\newcommand{\svgframe}[2]{% + \begin{frame}{#1} + \includesvg[ + width=\linewidth, + inkscapelatex=false + ]{#2} + \begin{center} + \textit{(na podstawie opracowania własnego)} + \end{center} + \end{frame}% +} + +\newcommand{\puttitle}{Potwierdzanie autentyczności oprogramowania poprzez + powtarzalność kompilacji} + +\newcommand{\putauthorname}{Wojciech Kosior} + +\hypersetup{ + pdftitle = {\puttitle}, + pdfauthor = {\putauthorname} +} + +\title{\puttitle{}} +\date{} + +\begin{document} + +\begin{frame}{} + \titlepage + + \vspace{-0.5in} + + \renewcommand{\arraystretch}{\baselinestretch} + \columnsCount{2} + + {\small + \begin{tabular}{ m{.35\netTableWidth} m{.65\netTableWidth} } + Autor: & \putauthorname \\ + Opiekun pracy: & dr hab.\ inż.\ Piotr Pacyna, prof.\ AGH \\ + Wydział: & Informatyki, Elektroniki i Telekomunikacji + \end{tabular} + } + + \renewcommand{\arraystretch}{1.5} + + \vspace{2in} + \begin{tikzpicture}[frameoverlay] + \path + (0.22,0.027) node{ + \includegraphics[ + height=0.85in + ]{Logo-WIET-2021.png} + } + (0.5,0.005) node{ + \includegraphics[ + height=1.05in + ]{agh_idub_pl_cmyk.pdf} + }; + \end{tikzpicture} +\end{frame} + +\note{ + \begin{itemize} + \item nazywam się\ldots{} + \item opiekun to\ldots{} + \item praca o: zabezpieczenie łańcucha dostaw oprogramowania + \end{itemize} +} + +\svgframe{Złożoność procesu kompilacji}{build-process-overview.svg} + +\note{ + \begin{itemize} + \item kompilacja: szeroko rozumiana (pakiety, ``budowanie'') + \item slajd: przykład + \item kompilacja do norm dystrybucji: nawet setki lini skryptu-przepisu na + pakiet + \end{itemize} +} + +\begin{frame}{Najważniejsze pojęcia} + \begin{itemize} + \item powtarzalność \textit{(reproducibility)} + \item hermetyczność + \item bootstrapowalność + \end{itemize} + + \vspace{0.3in} + + \includesvg[ + width=\linewidth, + inkscapelatex=false + ]{boxes.svg} +\end{frame} + +\note{ + \begin{itemize} + \item przy każdym powtórzeniu tej samej kompilacji -- bit-do-bitu identyczny + wynik + \item wykorzystanie wielokrotnej kompilacji + \begin{itemize} + \item różne infrastruktury/organizacje + \item utrudnione zanieczyszczenie oprogramowania złośliwym kodem w procesie + kompilacji + \end{itemize} + \item warunek konieczny niewystarczający powtarzalności: niezależność od + zmiennych + \begin{itemize} + \item zainstalowane programy, zasoby sieciowe + \item stąd: izolowanie procesu na poziomie sieci i systemu plików + \end{itemize} + \item pakiet samozależny: pakowanie + \end{itemize} +} + +\begin{frame}{Cel pracy} + \begin{itemize} + \item \sout{zapewnić deterministyczne działanie kompilatorów i powiązanych + narzędzi} + \item \textbf{zapewnić niezmienność elementów na wejściu procesu + (re)kompilacji} + \item \textbf{uniknąć pojedynczych punktów podatności \textit{(single points + of failure)} w procesie} + \end{itemize} +\end{frame} + +\note{ + \begin{itemize} + \item usuwanie źródeł niepowtarzalności w procesie kompilacji + \begin{itemize} + \item dotychczasowe prace innych osób + \item \textbf{nie} przedmiot tych badań + \end{itemize} + \item zamiast tego + \begin{itemize} + \item konkretne wersje zależności, narzędzi i (meta)danych w 1. kompilacji + \begin{itemize} + \item zagwarantowanie, że można je zidentyfikować + \item zagwarantowanie, że przy powtórzeniu kompilacji nie zostaną użyte + inne wersje + \end{itemize} + \item proces rozwiązywania zależności + \begin{itemize} + \item często wykonywany automatycznie + \item weryfikowanie powtarzalności jego wyniku + \end{itemize} + \end{itemize} + \end{itemize} +} + +\begin{frame}{Stan dotychczasowy} + \vspace{-0.2in} + + \begin{center} + Kompilacja pakietów + \end{center} + + \renewcommand{\arraystretch}{\baselinestretch} + \columnsCount{2} + + {\small + \begin{tabular}{ + >{\centering\arraybackslash}m{.5\netTableWidth} + >{\centering\arraybackslash}m{.5\netTableWidth} + } + powtarzalność monitorowana & powtórzenie utrudnione + \end{tabular} + } + + \vspace{-0.3in} + + \includesvg[ + width=\linewidth, + inkscapelatex=false + ]{ecosystems-state.svg} + + \begin{center} + \textit{(na podstawie opracowania własnego, z wykorzystaniem logotypów + istniejących projektów)} + \end{center} +\end{frame} + +\note{ + \begin{itemize} + \item praca skupiona na: repozytoria z tysiącami pakietów + \item Debian, GNU Guix + \begin{itemize} + \item state of the art + \item zasady działania opisane w pracy + \end{itemize} + \item repozytoria specyficzne dla konkretnych ekosystemów + \begin{itemize} + \item różna higiena + \item zautomatyzowanie rekompilacji = wyzwanie + \end{itemize} + \end{itemize} +} + +\begin{frame}{Postęp pakowania w 2025} + \renewcommand{\arraystretch}{1.5} + \columnsCount{4} + + \begin{tabular}{ + >{\raggedright\arraybackslash}p{.43\netTableWidth} + >{\raggedright\arraybackslash}p{.19\netTableWidth} + >{\raggedright\arraybackslash}p{.19\netTableWidth} + >{\raggedright\arraybackslash}p{.19\netTableWidth} + } + \rowcolor{gray!40} + \textit{\textbf{ekosystem}} & + \textbf{PyPI} & + \textbf{npm} & + \textbf{crates} \\ + + \textit{\textbf{pakiety w GNU Guix}} & + $3\,699$ & + $55$ & + $3\,704$ \\ + + \textit{\textbf{pakiety w Debianie}} & + $5\,312$ & + $998$ & + $1\,424$ + \end{tabular} + \begin{center} + \textit{(na podstawie opracowania własnego)} + \end{center} +\end{frame} + +\note{ + \begin{itemize} + \item stwierdzono: powolne przedostawanie się oprogramowania npm do + reprodukowalnych dystrybucji + \item \textbf{opisane obszernie} w pracy przypuszczenia powodów: trudne + bootstrapowanie, niskie zainteresowanie taką formą pakietów, \textbf{duże + drzewa zależności}, \textbf{dopuszczanie zależności występujących w wielu + wersjach jednocześnie} (aka konfliktów) + \end{itemize} +} + +\begin{frame}{Ekosystem npm} + \includesvg[ + width=\linewidth, + inkscapelatex=false + ]{dependee_counts.svg} + \begin{center} + \textit{(na podstawie opracowania własnego)} + \end{center} +\end{frame} + +\note{ + \begin{itemize} + \item w pracy opisany dokładnie ekosystem npm (rodzaje zależności itd.) + \item popularność = ile innych pakietów używa danego pakietu + \item badanie Goswami'ego z 2019, porównanie, analizowane zmiany + \item ogółem olbrzymie drzewa zależności, po ponad 1000 pakietów do projektu + \item pytanie: jaka część zależności faktycznie potrzebna do kompilacji + pakietu? + \end{itemize} +} + +\begin{frame}{Problem rozwiązywania zależności} + Dotychczasowe i zaproponowane podejścia do powtarzalności (``paradygmaty'') + + \vspace{0.5\baselineskip} + + \begin{itemize} + \setcounter{enumi}{-1} + \itemsep0.5\baselineskip + \item Brak powtarzalności \pause + \item Zależności ustalone, brak kroku rozwiązywania zależności (GNU Guix) + \item Powtarzalność kompilacji \textbf{nieobejmująca rozwiązywania + zależności} (pliki lockfile, Debian) \pause + \item Rozwiązywanie zależności powtarzane w ramach rekompilacji (nowe!) + \end{itemize} + + \note<2>{ + \begin{itemize} + \item klasyczne podejście (paradygmat 2) -- określić zestaw zależności, + udostępnić je dla procesu kompilacji pakietu, wykonać proces, najlepiej w + izolacji + \begin{itemize} + \item powtórzenia w oparciu o określone raz drzewo zależności + \item samo budowanie drzewa -- generalnie nie powtarzalne + \end{itemize} + \item Guix, Nix: przepis na pakiet = zdefiniowane wszystko + \end{itemize} + } + + \note<3>{ + \begin{itemize} + \item zależności nieustalone a priori kompilacji + \item odpowiednie mechanizmy $\rightarrow{}$ gwarantowanie dostępności i + niezmienności metadanych \textbf{potencjalnych} zależności + \item budowanie drzewa zależności -- powtarzalne + \end{itemize} + } +\end{frame} + +\begin{frame}{Najważniejsze pytania badawcze} + \begin{itemize} + \itemsep0.5\baselineskip + \item Jakie są typowe rozmiary drzew zależności projektów npm? + \item W jakim stopniu można je zredukować? + \item Czy rozmiary drzew zależności i zależności w wielu wersjach jednocześnie + stanowią główną przeszkodę w pakowaniu oprogramowania npm? + \end{itemize} +\end{frame} + +\note{ + \begin{itemize} + \item interesują: drzewa zależności \textbf{kompilacji} + \item dodatkowo: eliminacja zależności bezpośrednich, pośrednich, czy + bezpośrednich+pośrednich? + \item i.e., opisane wcześniej przypuszczenia głównych problemów – czy słuszne? + \end{itemize} +} + +\begin{frame}{Eksperyment} + \begin{itemize} + \itemsep0.5\baselineskip + \item Próba rekompilacji najpopularniejszych pakietów z npm Registry + \item Eliminacja zbędnych zależności + \item Określenie minimalnych drzew zależności + \end{itemize} + + \vspace{0.3in} + + \begin{center} + \includesvg[ + width=0.2\linewidth, + inkscapelatex=false + ]{construction-crane.svg} + \end{center} +\end{frame} + +\note{ + \begin{itemize} + \item ok. 300 najpopularniejszych pakietów z npm Registry + \item sprawdzenie: czy rekompilacja wg ``standardowej'' procedury możliwa + \item czy usunięcie danej zależności = błąd kompilacji? + \item rekompilacja wielokrotna każdego pakietu + \end{itemize} +} + +\begin{frame}{Statusy pakietów} + \vspace{-0.25\baselineskip} + + \begin{center} + \includesvg[ + width=0.95\linewidth, + inkscapelatex=false + ]{status-counts.svg} + \end{center} + + \begin{center} + \textit{(na podstawie opracowania własnego)} + \end{center} +\end{frame} + +\note{ + \begin{itemize} + \item konwencjonalne procedury -- automatyczne zrekompilowanie 10-20\% pakietów + \item porównywalnie, jak u Goswami'ego w 2019 + \item pakiety zrekompilowane z powodzeniem: dalsze testowanie + \end{itemize} +} + +\begin{frame}{Rozmiary drzew zależności} + \includesvg[ + width=\linewidth, + inkscapelatex=false + ]{tree-size-stats-no-bc.svg} + + \vspace{-0.5\baselineskip} + + \begin{center} + \textit{(na podstawie opracowania własnego)} + \end{center} +\end{frame} + +\note{ + \begin{itemize} + \item wykres: pierwotne i zredukowane drzewa zależności pakietów + \item porównanie: pakiety, które mają odpowiedniki w Debianie i pozostałe + \item brak spodziewanego związku ``rozmiar drzewa zależności : obecność w + Debianie'' + \item nieusuwalne konflikty zależności -- również brak spodziewanego związku z + obecnością w Debianie + \end{itemize} +} + +\begin{frame}{Wnioski} + \begin{itemize} + \itemsep0.5\baselineskip + \item Główne przeszkody w pakowaniu oprogramowania npm inne od przypuszczanych + \pause + \item Dotychczasowe paradygmaty najprawdopodobniej wystarczające do + zastosowania powtarzalności kompilacji do oprogramowania npm\ldots{} \pause + \item \ldots{}za to powtarzalnie kompilowane pakiety w dystrybucjach -- + nieadekwatne do potrzeb developerów \pause + \item Poziom bezpieczeństwa wynikający z powtarzalności kompilacji trudny + do osiągnięcia inaczej\ldots{} \pause + \item \ldots{}ale rozpowszechnienie tego środka wymaga kompatybilności z + dominującymi narzędziami i formatami pakietów + \end{itemize} + + \note<1>{ + \begin{itemize} + \item główne przeszkody: nie wielkość drzew, nie konflikty zależności + \item raczej bootstrapowalność, marne zainteresowanie takimi pakietami w + formacie Guix'a + \end{itemize} + } + + \note<2>{ + \begin{itemize} + \item nowy paradygmat niekoniecznie potrzebny + \item Guix: trudna bootstrapowalność, ale też OK + \item Guix/Nix: brak SPOF jak w Debianie + \end{itemize} + } + + \note<3>{ + \begin{itemize} + \item zwykła, prosta komenda ``npm install'' + \item nie pożeniona z pakietami Guix + \end{itemize} + } + + \note<4>{ + \begin{itemize} + \item SolarWinds 2020 + \item pojednycza, niby dobrze zabezpieczona infra + \end{itemize} + } + + \note<5>{ + \begin{itemize} + \item Święty Graal: repozytorium z powtarzalnie zkompilowanymi pakietami + \textbf{w formacie npm} + \item analogicznie dla PyPI itd. + \end{itemize} + } +\end{frame} + +\begin{frame}{Dziękuję za uwagę!} + Grafiki podmiotów trzecich wykorzystane w prezentacji: + + \vspace{\baselineskip} + + {\small + \columnsCount{3} + \begin{tabular}{ + >{\raggedright\arraybackslash}p{.34\netTableWidth} + >{\raggedright\arraybackslash}p{.20\netTableWidth} + >{\raggedright\arraybackslash}p{.46\netTableWidth} + } + \href{https://en.wikipedia.org/wiki/File:Debian-OpenLogo.svg}{logo + Debian} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{Debian-OpenLogo.svg} & + %% -- Software in the Public Interest, Inc (na licencjach + %% \href{https://creativecommons.org/licenses/by-sa/3.0/legalcode.en}{CC BY-SA + %% 3.0 Unported} lub + %% \href{https://www.gnu.org/licenses/lgpl-3.0.html#license-text}{GNU LGPL + %% wersja 3} lub późniejsza) + \\ + + \href{https://en.wikipedia.org/wiki/File:Guix_logo.svg}{logo GNU Guix} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{Guix_logo.svg} & + %% -- + %% Luis Felipe López Acevedo (na licencji + %% \href{https://creativecommons.org/licenses/by-sa/4.0/legalcode.en}{CC BY-SA + %% 4.0 International}) + \\ + + \href{https://en.wikipedia.org/wiki/File:NixOS_logo.svg}{logo NixOS} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{NixOS_logo.svg} & + %% -- + %% Tim Cuthbertson (na licencji + %% \href{https://creativecommons.org/licenses/by/4.0/legalcode.en}{CC BY 4.0 + %% International}) + \\ + + \href{https://en.wikipedia.org/wiki/File:Archlinux-logo-standard-version.svg}{logo + Arch Linux} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{Archlinux-logo-standard-version.svg} & + %% -- Judd Vinet, Aaron Griffin i Levente Polyák (na licencji GNU + %% GPL wersja 2 lub późniejsza) + \\ + + \href{https://en.wikipedia.org/wiki/File:Npm-logo.svg}{logo npm} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{Npm-logo.svg} & + %% -- npm, Inc. + \\ + + \href{https://en.wikipedia.org/wiki/File:PyPI_logo.svg}{logo PyPI} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{PyPI_logo.svg} & + %% -- Python Software Foundation (na licencji GNU GPL wersja 2 lub + %% późniejsza) + \\ + + \href{https://en.wikipedia.org/wiki/File:Rust_programming_language_black_logo.svg}{logo + Rust} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{Rust_programming_language_black_logo.svg} & + %% -- Rust Foundation (na licencji + %% \href{https://creativecommons.org/licenses/by/4.0/legalcode.en}{CC BY + %% 4.0 International}) + \\ + + \href{https://en.wikipedia.org/wiki/File:Apache_Maven_logo.svg}{logo + Apache Maven} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{Apache_Maven_logo.svg} & + %% -- Apache Software Foundation (na licencji + %% \href{https://www.apache.org/licenses/LICENSE-2.0}{Apache 2.0}) + \\ + + \href{https://seeklogo.com/vector-logo/272997/composer}{logo Composer} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{composer-seeklogo.svg} & + %% -- WizardCat (na licencji + %% \href{https://github.com/composer/composer/raw/main/LICENSE}{Expat}) + \\ + + \href{https://openclipart.org/detail/202046/loupe-magnifer}{lupa} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{Loupe.svg} & + \href{https://openclipart.org/artist/spadassin}{openclipart.org/artist/spadassin} + \\ + + \href{https://openclipart.org/detail/3574/-by--3574}{kartonowe pudło} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{bogdanco_Simple_cardboard_box.svg} & + \href{https://openclipart.org/artist/bogdanco}{openclipart.org/artist/bogdanco} + \\ + + \href{https://openclipart.org/detail/168285/construction-crane}{żuraw + budowlany} & + \includesvg[ + height=\baselineskip, + inkscapelatex=false + ]{construction-crane.svg} & + \href{https://openclipart.org/artist/Markacio}{openclipart.org/artist/Markacio} + \end{tabular} + } +\end{frame} + +\end{document} + +% https://publicdomainvectors.org/en/free-clipart/Vector-image-of-closed-cardboard-box/19548.html +% https://publicdomainvectors.org/en/free-clipart/Loupe-magnifer/73563.html |