diff --git a/device/README.md b/device/README.md
index 39b6c154f..3213ea3e2 100644
--- a/device/README.md
+++ b/device/README.md
@@ -173,6 +173,6 @@ Get the device's current language locale tag.
#### OperatingSystem
-'ios' | 'android' | 'windows' | 'mac' | 'unknown'
+'ios' | 'android' | 'windows' | 'mac' | 'linux' | 'freebsd' | 'openbsd' | 'unknown'
diff --git a/device/src/definitions.ts b/device/src/definitions.ts
index 20f4ed006..b76f022fe 100644
--- a/device/src/definitions.ts
+++ b/device/src/definitions.ts
@@ -1,4 +1,4 @@
-export type OperatingSystem = 'ios' | 'android' | 'windows' | 'mac' | 'unknown';
+export type OperatingSystem = 'ios' | 'android' | 'windows' | 'mac' | 'linux' | 'freebsd' | 'openbsd' | 'unknown';
export interface DeviceId {
/**
diff --git a/device/src/web.ts b/device/src/web.ts
index fadcff4cd..8b5d39e42 100644
--- a/device/src/web.ts
+++ b/device/src/web.ts
@@ -122,6 +122,12 @@ export class DeviceWeb extends WebPlugin implements DevicePlugin {
uaFields.operatingSystem = 'windows';
} else if (/Mac/i.test(ua)) {
uaFields.operatingSystem = 'mac';
+ } else if (/Linux/i.test(ua)) {
+ uaFields.operatingSystem = 'linux';
+ } else if (/FreeBSD/i.test(ua)) {
+ uaFields.operatingSystem = 'freebsd';
+ } else if (/OpenBSD/i.test(ua)) {
+ uaFields.operatingSystem = 'openbsd';
} else {
uaFields.operatingSystem = 'unknown';
}