diff options
-rw-r--r-- | ui/qt5/CMakeLists.txt | 5 | ||||
-rw-r--r-- | ui/qt5/firmwarepage.cc | 54 | ||||
-rw-r--r-- | ui/qt5/firmwarepage.hh | 30 | ||||
-rw-r--r-- | ui/qt5/horizon.qrc | 1 | ||||
-rw-r--r-- | ui/qt5/horizonwizard.cc | 6 | ||||
-rw-r--r-- | ui/qt5/resources/firmware-help.txt | 49 |
6 files changed, 145 insertions, 0 deletions
diff --git a/ui/qt5/CMakeLists.txt b/ui/qt5/CMakeLists.txt index 6279cc1..d33e74a 100644 --- a/ui/qt5/CMakeLists.txt +++ b/ui/qt5/CMakeLists.txt @@ -17,6 +17,11 @@ set(UI_SOURCES hostnamepage.cc horizon.qrc) + +IF(UNSUPPORTED_NONFREE_FIRMWARE) + LIST(APPEND UI_SOURCES firmwarepage.cc) +ENDIF(UNSUPPORTED_NONFREE_FIRMWARE) + add_executable(horizon-qt5 ${UI_SOURCES}) target_link_libraries(horizon-qt5 Qt5::Network Qt5::Widgets) diff --git a/ui/qt5/firmwarepage.cc b/ui/qt5/firmwarepage.cc new file mode 100644 index 0000000..235d9af --- /dev/null +++ b/ui/qt5/firmwarepage.cc @@ -0,0 +1,54 @@ +/* + * firmwarepage.cc - Implementation of the UI.Firmware page + * horizon-qt5, the Qt 5 user interface for + * Project Horizon + * + * Copyright (c) 2019 Adélie Linux and contributors. All rights reserved. + * This code is licensed under the AGPL 3.0 license, as noted in the + * LICENSE-code file in the root directory of this repository. + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +#include "firmwarepage.hh" + +#include <QLabel> +#include <QVariant> +#include <QVBoxLayout> + +FirmwarePage::FirmwarePage(QWidget *parent) : HorizonWizardPage(parent) { + setTitle(tr("Load Firmware")); + loadWatermark("intro"); + + QLabel *descLabel = new QLabel(tr( + "<p>Your computer may require the use of drivers which use proprietary, closed-source components (or <i>firmware</i>) in order to use certain hardware or functionality.</p>" + "<p>Most Wi-Fi network adaptors and 3D graphics cards require proprietary firmware.</p>" + "<p>Proprietary firmware cannot be audited for security or reliability issues due to its closed-source nature. Only install proprietary firmware if you require it.</p>" + "<p>If you intend to use this computer to perform security-sensitive tasks, we strongly recommend that you choose not to load firmware on this computer.</p>" + "<p>Do you want to load firmware on this computer?</p>")); + descLabel->setTextFormat(Qt::RichText); + descLabel->setWordWrap(true); + + noButton = new QRadioButton(tr("&No, do not load firmware on this computer.")); + noButton->setChecked(true); + yesButton = new QRadioButton(tr("&Yes, load firmware on this computer.")); + firmwareChoice = new QButtonGroup; + firmwareChoice->addButton(noButton); + firmwareChoice->addButton(yesButton); + + QVBoxLayout *layout = new QVBoxLayout; + layout->addWidget(descLabel); + layout->addStretch(); + layout->addWidget(noButton); + layout->addWidget(yesButton); + layout->addStretch(); + + setField("firmware", QVariant(false)); + connect(firmwareChoice, static_cast<void (QButtonGroup:: *)(QAbstractButton *)>(&QButtonGroup::buttonClicked), + [=](QAbstractButton *button) { + if(button == yesButton) setField("firmware", QVariant(true)); + else setField("firmware", QVariant(false)); + }); + + setLayout(layout); +} diff --git a/ui/qt5/firmwarepage.hh b/ui/qt5/firmwarepage.hh new file mode 100644 index 0000000..e283a25 --- /dev/null +++ b/ui/qt5/firmwarepage.hh @@ -0,0 +1,30 @@ +/* + * firmwarepage.hh - Definition of the UI.Firmware page + * horizon-qt5, the Qt 5 user interface for + * Project Horizon + * + * Copyright (c) 2019 Adélie Linux and contributors. All rights reserved. + * This code is licensed under the AGPL 3.0 license, as noted in the + * LICENSE-code file in the root directory of this repository. + * + * SPDX-License-Identifier: AGPL-3.0-only + */ + +#ifndef FIRMWAREPAGE_HH +#define FIRMWAREPAGE_HH + +#include "horizonwizardpage.hh" + +#include <QButtonGroup> +#include <QRadioButton> + +class FirmwarePage : public HorizonWizardPage { +public: + FirmwarePage(QWidget *parent = nullptr); +private: + QButtonGroup *firmwareChoice; + QRadioButton *yesButton; + QRadioButton *noButton; +}; + +#endif /* !FIRMWAREPAGE_HH */ diff --git a/ui/qt5/horizon.qrc b/ui/qt5/horizon.qrc index 43e8475..9ef9255 100644 --- a/ui/qt5/horizon.qrc +++ b/ui/qt5/horizon.qrc @@ -17,6 +17,7 @@ <file>resources/intro-help.txt</file> <file>resources/input-help.txt</file> <file>resources/partition-help.txt</file> + <file>resources/firmware-help.txt</file> <file>resources/network-start-help.txt</file> <file>resources/network-iface-help.txt</file> <file>resources/network-dhcp-help.txt</file> diff --git a/ui/qt5/horizonwizard.cc b/ui/qt5/horizonwizard.cc index 7a64d2a..ba4b487 100644 --- a/ui/qt5/horizonwizard.cc +++ b/ui/qt5/horizonwizard.cc @@ -31,6 +31,9 @@ extern "C" { #include "intropage.hh" #include "inputpage.hh" +#ifdef NON_LIBRE_FIRMWARE +#include "firmwarepage.hh" +#endif /* NON_LIBRE_FIRMWARE */ #include "networkingpage.hh" #include "networkifacepage.hh" #include "netsimplewifipage.hh" @@ -173,6 +176,9 @@ HorizonWizard::HorizonWizard(QWidget *parent) : QWizard(parent) { setPage(Page_Intro, new IntroPage); setPage(Page_Input, new InputPage); +#ifdef NON_LIBRE_FIRMWARE + setPage(Page_Firmware, new FirmwarePage); +#endif /* NON_LIBRE_FIRMWARE */ setPage(Page_Network, new NetworkingPage); setPage(Page_Network_Iface, new NetworkIfacePage); setPage(Page_Network_Wireless, new NetworkSimpleWirelessPage); diff --git a/ui/qt5/resources/firmware-help.txt b/ui/qt5/resources/firmware-help.txt new file mode 100644 index 0000000..6456dc1 --- /dev/null +++ b/ui/qt5/resources/firmware-help.txt @@ -0,0 +1,49 @@ +<h2>Firmware</h2> + +<p>This page allows you to decide whether or not to install proprietary +firmware on this computer.</p> + +<h3>What is firmware?</h3> + +<p>"Firmware" is a component of a hardware driver. This component is uploaded +to the hardware itself, which allows the hardware to perform operations or +control itself.</p> + +<p>For example, network devices sometimes contain firmware that allows them to +perform checksum offloading.</p> + +<h3>What is <i>proprietary</i> firmware?</h3> + +<p>Proprietary firmware is firmware that is released by the hardware +manufacturer without source code. Usually, this proprietary firmware is +provided without warranty by the hardware manufacturer. Since it is closed +source and fully proprietary, it cannot be audited for security or reliability +issues.</p> + +<p>This means that when you load proprietary firmware on to a computer, we +can no longer provide any assurances to its security or reliability.</p> + +<h3>Why would I want to load proprietary firmware?</h3> + +<p>Most wireless networking cards, and virtually all 3D graphics cards, utilise +proprietary firmware. You may be unable to connect to a wireless network, or +use certain radio frequencies (such as the 5 GHz band), without proprietary +firmware. You may also be unable to use the maximum resolution of your +graphics card, or utilise the 3D acceleration capabilities of it (including +OpenGL and Vulkan), without proprietary firmware.</p> + +<h3>What are the risks of using proprietary firmware?</h3> + +<p>Your system may be compromised by security issues in the firmware. Your +system may also become unstable due to improper programming of the +firmware.</p> + +<h3>Which option should I choose?</h3> + +<p>Adélie Linux allows you the freedom to choose whether or not you wish to +install proprietary firmware on your computer.</p> + +<p>If you have an elevated threat profile, you should always choose No.</p> + +<p>If you want to utilise hardware that requires proprietary firmware despite +the potential risk, you may choose Yes.</p> |