Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/lazy-lint.bash
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ shame_list=(
[./src/case_studies/TiogaPass.md]=1
[./src/coreboot.u-root.systemboot/index.md]=1
[./src/SUMMARY.md]=1
[./src/u-root.md]=1
[./src/utilities/dut.md]=1
[./src/utilities/UEFI_Tool_Kit.md]=1
)
Expand Down
22 changes: 11 additions & 11 deletions src/u-root-golang.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
# Benefits of using the Go user-space environment and compiler
# Benefits of using Go for firmware

Go is a systems programming language created by Google. Go has strong typing,
language level support for concurrency, inter-process communication via
channels, runtime type safety and other protective measures, dynamic allocation
and garbage collection, and closures. Go has a package name notation similar to
Java that makes it clear to determine what packages a given program needs.

The modern language constructs make Go a much safer language than C. This
safety is critical for network-attached embedded systems, which usually have
network utilities written in C, including web servers, network servers
including `sshd`, and programs that provide access to a command interpreter,
itself written in C. All are proving to be vulnerable to the attack-rich
environment that the Internet has become.
channels a la Occam[^1], Limbo[^2] and Alef[^3], runtime type safety and other
protective measures, dynamic allocation and garbage collection, and closures.
Go has a package name notation similar to Java that makes it clear to determine
what packages a given program needs.

Even the most skilled programmers can make mistakes that in C can be
unrecoverable, especially on network connected systems. Currently, even the
Expand All @@ -36,3 +30,9 @@ system. Another solution is to compile everything together into one
BusyBox-style program. Alternatively, programs can be fetched over the network,
but compiling dynamically with Go or creating a BusyBox program are the
recommended solutions.

[^1]: MAY,D.Occam.ACMSigplanNotices18,4(1983),69–79.
[^2]: RITCHIE, D. M. The limbo programming language. Inferno Programmer’s
Manual 2 (1997).
[^3]: WINTERBOTTOM, P. Alef language reference manual. Plan 9 Programmer’s Man
(1995).
Loading