From 43761380fc0dcf5b87b05860f1f7a4036d23a554 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:38:31 -0600 Subject: [PATCH 01/34] add iwa article --- blog/posts/pwa-vs-iwa.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 blog/posts/pwa-vs-iwa.md diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md new file mode 100644 index 00000000..bf30cdb4 --- /dev/null +++ b/blog/posts/pwa-vs-iwa.md @@ -0,0 +1,15 @@ +--- +date: + created: 2024-11-17 +categories: + - Opinion +authors: + - fria +tags: + - PWA + - IWA +license: BY-SA +--- +# PWA vs IWA + +The concept of a Progressive Web App is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. \ No newline at end of file From 995c8d66a66072d1e3bf92b087e65a2f3dbf1110 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:38:52 -0600 Subject: [PATCH 02/34] update date --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index bf30cdb4..03ec8dc6 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -1,6 +1,6 @@ --- date: - created: 2024-11-17 + created: 2024-11-21 categories: - Opinion authors: From f34a71c3959c63b03bf8df53c9e570ece5f23513 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:43:25 -0600 Subject: [PATCH 03/34] add electron info --- blog/posts/pwa-vs-iwa.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 03ec8dc6..52e47f4d 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -12,4 +12,6 @@ license: BY-SA --- # PWA vs IWA -The concept of a Progressive Web App is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. \ No newline at end of file +The concept of a Progressive Web App is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. + +Attempts at similar things have been made before, notably the infamous Electron allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. \ No newline at end of file From 33953d6b9ed99d8da07006230d97eb527287a7f6 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:46:32 -0600 Subject: [PATCH 04/34] add server info --- blog/posts/pwa-vs-iwa.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 52e47f4d..949b5575 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -14,4 +14,6 @@ license: BY-SA The concept of a Progressive Web App is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. -Attempts at similar things have been made before, notably the infamous Electron allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. \ No newline at end of file +Attempts at similar things have been made before, notably the infamous Electron allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. + +So why isn't every app shipping as a PWA? The answer is an old problem with web content: the fact that you have to trust the server every time you use it. \ No newline at end of file From 4aca2c54b7c1cb860955817903c5adacd59795cf Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:49:45 -0600 Subject: [PATCH 05/34] add info about attacks against PWAs --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 949b5575..b32ea66d 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -16,4 +16,4 @@ The concept of a Progressive Web App is enticing: an app using web technologies Attempts at similar things have been made before, notably the infamous Electron allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. -So why isn't every app shipping as a PWA? The answer is an old problem with web content: the fact that you have to trust the server every time you use it. \ No newline at end of file +So why isn't every app shipping as a PWA? The answer is an old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. \ No newline at end of file From 6fdefbe8be70a8de7674d9c9a9da0d9b31851bd5 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:13:58 -0600 Subject: [PATCH 06/34] add electron link --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index b32ea66d..3a90832c 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -14,6 +14,6 @@ license: BY-SA The concept of a Progressive Web App is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. -Attempts at similar things have been made before, notably the infamous Electron allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. +Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. So why isn't every app shipping as a PWA? The answer is an old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. \ No newline at end of file From 21f3745a44169a016ae04e4100d4091c56371f07 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Thu, 21 Nov 2024 14:16:52 -0600 Subject: [PATCH 07/34] pwa link --- blog/posts/pwa-vs-iwa.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 3a90832c..227e727f 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -12,8 +12,8 @@ license: BY-SA --- # PWA vs IWA -The concept of a Progressive Web App is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. +The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. -Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. +Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This approach has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. PWAs use the browser that you already have installed, so So why isn't every app shipping as a PWA? The answer is an old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. \ No newline at end of file From d381cef7479c49b6642475a324b6c52b6bb3b5f1 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Fri, 22 Nov 2024 11:25:23 -0600 Subject: [PATCH 08/34] add more info --- blog/posts/pwa-vs-iwa.md | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 227e727f..de4e596b 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -12,8 +12,17 @@ license: BY-SA --- # PWA vs IWA -The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even working offline. Support in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. +The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. -Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This approach has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. PWAs use the browser that you already have installed, so +Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This approach has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. + +So why isn't every app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. + +A typical native app is downloaded onto your computer and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. + +Web Packaging is a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. + +Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). + +There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. -So why isn't every app shipping as a PWA? The answer is an old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. \ No newline at end of file From ac0a3ca8c5b09efbf2324f553cb0f1c76020e81f Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 19:59:47 -0600 Subject: [PATCH 09/34] iwa wording --- blog/posts/pwa-vs-iwa.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index de4e596b..92319562 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -20,9 +20,7 @@ So why isn't every app shipping as a PWA? The answer is an age old problem with A typical native app is downloaded onto your computer and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. -Web Packaging is a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. - -Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). +Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. From 1d037f3e0a90350e79f4ac4c0f582832e53e70d6 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:12:42 -0600 Subject: [PATCH 10/34] wording --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 92319562..0059be6f 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -20,7 +20,7 @@ So why isn't every app shipping as a PWA? The answer is an age old problem with A typical native app is downloaded onto your computer and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. -Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. +Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. For security-critical apps that use E2EE, this would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. From ebd9ec1753ba6f4ff6066de8b4099d943a9ae998 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:24:35 -0600 Subject: [PATCH 11/34] add more --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 0059be6f..f5f62e7f 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -12,7 +12,7 @@ license: BY-SA --- # PWA vs IWA -The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. +The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This approach has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. From 89e2d75d836c77d9a81bed827b82f4538d6698f7 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:39:13 -0600 Subject: [PATCH 12/34] add kaspersky link about electron apps --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index f5f62e7f..736ac510 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -14,7 +14,7 @@ license: BY-SA The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. -Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This approach has its drawbacks, though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. +Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. So why isn't every app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. From 76d78db04ca52d69d93c79e00342cec3a2da5c1a Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:41:23 -0600 Subject: [PATCH 13/34] change title --- blog/posts/pwa-vs-iwa.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 736ac510..af20a4c6 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -10,7 +10,7 @@ tags: - IWA license: BY-SA --- -# PWA vs IWA +# IWA: The Future of Web Apps? The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. @@ -20,7 +20,7 @@ So why isn't every app shipping as a PWA? The answer is an age old problem with A typical native app is downloaded onto your computer and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. -Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. For security-critical apps that use E2EE, this would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. +Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. This would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. From c50b5d3616b3bbd7824437322ae0d77c884760dc Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 20:52:09 -0600 Subject: [PATCH 14/34] add ending --- blog/posts/pwa-vs-iwa.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index af20a4c6..78fcbce3 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -24,3 +24,5 @@ Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. +Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. + From d3142a00127a6e0c407091d088de19c087266e0d Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 21:42:36 -0600 Subject: [PATCH 15/34] wording --- blog/posts/pwa-vs-iwa.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 78fcbce3..65985292 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -14,9 +14,9 @@ license: BY-SA The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. -Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling the browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. +Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling an entire chromium browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. Each app will have its own version of chromium with its own attack surface, adding up to a performance and security nightmare. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. -So why isn't every app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. +So why isn't every Electron app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. A typical native app is downloaded onto your computer and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. @@ -25,4 +25,3 @@ Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. - From 0c7b3a224e545d2bbf192f1ba52d386501d4557c Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sat, 23 Nov 2024 22:37:09 -0600 Subject: [PATCH 16/34] add info about drawbacks --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 65985292..5f39f807 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -22,6 +22,6 @@ A typical native app is downloaded onto your computer and only updates when the Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. This would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. -There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. +The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. From 6912dd34e184292f1c6f666e21bc22ca1310ea3f Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 10:45:06 -0600 Subject: [PATCH 17/34] add section titles --- blog/posts/pwa-vs-iwa.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 5f39f807..83495ff7 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -14,14 +14,20 @@ license: BY-SA The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. +## Current Web-Based Apps + Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling an entire chromium browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. Each app will have its own version of chromium with its own attack surface, adding up to a performance and security nightmare. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. -So why isn't every Electron app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server every time you use it. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. +So why isn't every Electron app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server fully. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. You also need to rely on the security of DNS name resolution and the [certificate authority](https://www.digicert.com/blog/what-is-a-certificate-authority) system. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. -A typical native app is downloaded onto your computer and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. +## Improving Web Apps + +A typical native app is downloaded onto your computer from some kind of trusted place like an app store and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. Trying to push a malicious update to all users is more likely to get caught than a highly targeted attack. Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. This would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. +## Issues + The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. From d70b730e6329251270bc1a3355d11e7bd251f1dd Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 11:05:51 -0600 Subject: [PATCH 18/34] add more info --- blog/posts/pwa-vs-iwa.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 83495ff7..2b1b4a0d 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -26,8 +26,12 @@ A typical native app is downloaded onto your computer from some kind of trusted Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. This would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. +This higher security assurance from isolated and signed web applications and the inherently more trusted nature of a natively installed app will allow for IWAs to safely have access to APIs that it wouldn't be safe to allow normal websites to access, like [Direct Sockets](https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md). + +IWAs use a totally new [URL scheme](https://github.com/WICG/isolated-web-apps/blob/main/Scheme.md) since they're not relying on HTTPS certificate authorities or DNS. They're totally isolated from each other and the web using enforced Content Security Policy and Cross-Origin Isolation, hence the name. + ## Issues The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. -Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. +Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines and select development partners of Google. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. From 78f7701a9252e3fdc8597f88b6e4016e3d985d84 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 11:07:16 -0600 Subject: [PATCH 19/34] add longer intro --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 2b1b4a0d..0922e479 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -12,7 +12,7 @@ license: BY-SA --- # IWA: The Future of Web Apps? -The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. +The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. But there are problems with web content that PWAs haven't solved. ## Current Web-Based Apps From ce70c0ecf6bfb80688f4a37747ecf992dc957ff8 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 11:12:08 -0600 Subject: [PATCH 20/34] update date --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 0922e479..07e3dbb3 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -1,6 +1,6 @@ --- date: - created: 2024-11-21 + created: 2024-11-24 categories: - Opinion authors: From b03dbc3d8c1f253fab85bbb1a25b3603c6828857 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 11:20:48 -0600 Subject: [PATCH 21/34] add google info --- blog/posts/pwa-vs-iwa.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 07e3dbb3..746bad57 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -26,6 +26,10 @@ A typical native app is downloaded onto your computer from some kind of trusted Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. This would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. +[Google](https://chromeos.dev/en/web/isolated-web-apps) distinguishes between the drive by web, PWAs, and IWAs. The drive by web requires more conservative access to the system as the most accessible and therefore least trusted option. PWAs are a bit more trusted and so can integrate a bit more deeply into the system. IWAs are the most trusted and as such can have deeper access into the system and more powerful capabilities. + + + This higher security assurance from isolated and signed web applications and the inherently more trusted nature of a natively installed app will allow for IWAs to safely have access to APIs that it wouldn't be safe to allow normal websites to access, like [Direct Sockets](https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md). IWAs use a totally new [URL scheme](https://github.com/WICG/isolated-web-apps/blob/main/Scheme.md) since they're not relying on HTTPS certificate authorities or DNS. They're totally isolated from each other and the web using enforced Content Security Policy and Cross-Origin Isolation, hence the name. From 70b03effd0d877e47760a8aeb07aa1561316949d Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 11:28:05 -0600 Subject: [PATCH 22/34] add image --- .../iwa-the-future-of-web-apps/iwa-diagram.png | Bin 0 -> 96568 bytes blog/posts/pwa-vs-iwa.md | 5 ++++- 2 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 blog/assets/images/iwa-the-future-of-web-apps/iwa-diagram.png diff --git a/blog/assets/images/iwa-the-future-of-web-apps/iwa-diagram.png b/blog/assets/images/iwa-the-future-of-web-apps/iwa-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..a8d4b8c97d65e8e402d7941201412a6d60e48fbc GIT binary patch literal 96568 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 *!-zH9YrHn1S2-f)QIsc^q@0iO;3|2 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 JE7Wla{~uQl&ffq4 literal 0 HcmV?d00001 diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 746bad57..ed325031 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -28,7 +28,10 @@ Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https [Google](https://chromeos.dev/en/web/isolated-web-apps) distinguishes between the drive by web, PWAs, and IWAs. The drive by web requires more conservative access to the system as the most accessible and therefore least trusted option. PWAs are a bit more trusted and so can integrate a bit more deeply into the system. IWAs are the most trusted and as such can have deeper access into the system and more powerful capabilities. - +
+ ![Diagram showing the drive by web, a PWA, then a dotted line separating them from IWAs](../assets/images/iwa-the-future-of-web-apps/iwa-diagram.png) +
source: Google
+
This higher security assurance from isolated and signed web applications and the inherently more trusted nature of a natively installed app will allow for IWAs to safely have access to APIs that it wouldn't be safe to allow normal websites to access, like [Direct Sockets](https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md). From 7e68f6da84b3ddbaed6eee7bff1f7c074b3b3339 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 11:30:36 -0600 Subject: [PATCH 23/34] add web tag --- blog/posts/pwa-vs-iwa.md | 1 + 1 file changed, 1 insertion(+) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index ed325031..5a091a3a 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -8,6 +8,7 @@ authors: tags: - PWA - IWA + - Web license: BY-SA --- # IWA: The Future of Web Apps? From 89f2c1de8eeb7fa03d66db8f47d6cb409cebea37 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 20:06:56 -0600 Subject: [PATCH 24/34] add article on web bundling --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 5a091a3a..f32f9854 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -40,6 +40,6 @@ IWAs use a totally new [URL scheme](https://github.com/WICG/isolated-web-apps/bl ## Issues -The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. +The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. Martin has a nice in-depth [article](https://lowentropy.net/posts/bundles/) on bundling web content that's worth checking out on their website. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines and select development partners of Google. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. From aa4d388c2086f7dd5a67c32f5112d7de9054f05f Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Sun, 24 Nov 2024 20:10:21 -0600 Subject: [PATCH 25/34] wording --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index f32f9854..86469ed3 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -17,7 +17,7 @@ The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/ ## Current Web-Based Apps -Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling an entire chromium browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. Each app will have its own version of chromium with its own attack surface, adding up to a performance and security nightmare. PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. +Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling an entire chromium browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. Each app will have its own version of chromium with its own attack surface, adding up to a performance and security nightmare. In contrast, PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. So why isn't every Electron app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server fully. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. You also need to rely on the security of DNS name resolution and the [certificate authority](https://www.digicert.com/blog/what-is-a-certificate-authority) system. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. From b1ba33f34de1cd44f39ec58ae2f4f54d6935cf51 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:13:27 -0600 Subject: [PATCH 26/34] title change Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 86469ed3..2fa641ad 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -11,7 +11,7 @@ tags: - Web license: BY-SA --- -# IWA: The Future of Web Apps? +# State of the Web App: Current Woes and Promising Futures The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. But there are problems with web content that PWAs haven't solved. From bb3ca6d1411a3401351db7893d863ef933475ab2 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:14:03 -0600 Subject: [PATCH 27/34] capitalization Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 2fa641ad..611c24bf 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -13,7 +13,7 @@ license: BY-SA --- # State of the Web App: Current Woes and Promising Futures -The concept of a [Progressive Web App](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an app using web technologies that’s inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. But there are problems with web content that PWAs haven't solved. +The concept of a [progressive web app](https://developer.mozilla.org/en-US/docs/Web/Progressive_web_apps) is enticing: an application using web technologies that is inherently cross platform (since it runs in a browser) and acts like a native app, even functioning offline. Support for PWAs in traditionally locked-down platforms like iOS means that PWAs can give users the freedom to install apps without having to go through Apple’s App Store. But there are problems with web content that PWAs haven't solved. ## Current Web-Based Apps From 6278a66ae8dac7a21e8c2ea822fd8a3291595ecc Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:14:53 -0600 Subject: [PATCH 28/34] wording Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 611c24bf..4e2163f0 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -17,7 +17,7 @@ The concept of a [progressive web app](https://developer.mozilla.org/en-US/docs/ ## Current Web-Based Apps -Attempts at similar things have been made before, notably the infamous [Electron](https://www.electronjs.org) allows developers to easily create cross-platform apps by essentially bundling an entire chromium browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated, but many Electron apps ship outdated versions, leaving those apps vulnerable. Each app will have its own version of chromium with its own attack surface, adding up to a performance and security nightmare. In contrast, PWAs use the browser that you already have installed, so as long as you keep it updated all your apps will have all the latest security fixes. +Attempts at similar things have been made before, the most infamous of which is [Electron](https://www.electronjs.org). Electron is a software framework that allows developers to easily create cross-platform apps by essentially bundling an entire Chromium browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated with the latest security fixes, but many Electron apps ship outdated versions, leaving those apps vulnerable. Each Electron app has its own version of Chromium with its own attack surface, amounting to a performance and security nightmare. In contrast, PWAs use the browser that you already have installed, so as long as you keep it updated, all your apps will have the latest security fixes. So why isn't every Electron app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server fully. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. You also need to rely on the security of DNS name resolution and the [certificate authority](https://www.digicert.com/blog/what-is-a-certificate-authority) system. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. From 1b3c35cc1d866854d91cbc7d28e4421fd970b1df Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:15:36 -0600 Subject: [PATCH 29/34] wording Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 4e2163f0..e62b7df4 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -19,7 +19,7 @@ The concept of a [progressive web app](https://developer.mozilla.org/en-US/docs/ Attempts at similar things have been made before, the most infamous of which is [Electron](https://www.electronjs.org). Electron is a software framework that allows developers to easily create cross-platform apps by essentially bundling an entire Chromium browser in with the app. This approach has its [drawbacks](https://usa.kaspersky.com/blog/electron-framework-security-issues/28952/?srsltid=AfmBOor_UcYY-84soHz5K2ULTmhlX44-DsIfJp_StotBrusD63MweSGO), though. Browsers have huge attack surface so it's important to keep them updated with the latest security fixes, but many Electron apps ship outdated versions, leaving those apps vulnerable. Each Electron app has its own version of Chromium with its own attack surface, amounting to a performance and security nightmare. In contrast, PWAs use the browser that you already have installed, so as long as you keep it updated, all your apps will have the latest security fixes. -So why isn't every Electron app shipping as a PWA? The answer is an age old problem with web content: the fact that you have to trust the server fully. You make an HTML GET request and you're served the content, but if the server is compromised, you'll be served a compromised website. You also need to rely on the security of DNS name resolution and the [certificate authority](https://www.digicert.com/blog/what-is-a-certificate-authority) system. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server even just temporarily, could distribute compromised clients to millions of people, potentially breaking E2EE or any other number of malicious actions. +So why isn't every Electron app shipping as a PWA? The answer is an age-old problem with web content: the fact that you have to trust the server fully. You make an HTML GET request and you're served the content (i.e., the site's HTML, CSS, and JavaScript), but if the server is compromised, you'll be served a compromised website. You also need to rely on the security of DNS name resolution and the [certificate authority](https://www.digicert.com/blog/what-is-a-certificate-authority) system. This is a huge problem for security-sensitive applications like messengers. An attacker that gains access to their server—even just temporarily—could distribute compromised clients to millions of people, potentially breaking E2EE or executing a host of other malicious actions. ## Improving Web Apps From cdf7e638a650246d6138f1cbe1e1390a9dc843f6 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:16:39 -0600 Subject: [PATCH 30/34] wording Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index e62b7df4..f480f032 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -23,7 +23,7 @@ So why isn't every Electron app shipping as a PWA? The answer is an age-old prob ## Improving Web Apps -A typical native app is downloaded onto your computer from some kind of trusted place like an app store and only updates when the developers push an update out, and there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review/) and the Google Play [review process](https://support.google.com/googleplay/android-developer/answer/9859455?hl=en). Plus it's much more difficult to only target a specific person, like someone with access to the servers that serve the HTML, CSS, and Javascript could do. Trying to push a malicious update to all users is more likely to get caught than a highly targeted attack. +A typical native app is downloaded onto your computer from some kind of trusted place like an app store and only receives updates when the developers push them out. Additionally, there's usually a process of checks and verification before that happens, like Apple's [App Review](https://developer.apple.com/distribute/app-review) and the Google Play [App Review](https://support.google.com/googleplay/android-developer/answer/9859455) process. In contrast to PWAs, with which the threat of an attacker with server access constantly looms, it's much more difficult to target a particular person. In other words, a malicious app update is much less likely to escape scrutiny than a highly targeted attack via compromised servers. Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. This would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. From 0daefc8cd4809c2f49ecd9916bf631aaeb966b90 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:17:37 -0600 Subject: [PATCH 31/34] wording Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index f480f032..8cb1fd61 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -27,7 +27,7 @@ A typical native app is downloaded onto your computer from some kind of trusted Isolated Web Apps (IWA) build on the work done on PWAs and [Web Packaging](https://github.com/WICG/webpackage). They are a specification that allows web content to be distributed offline outside of a browser, much like a traditional app. It can be signed just like a regular app too, allowing you to verify that it came from the proper place and hasn't been modified. You could install an IWA from your favorite app store just like any other app and have the same security assurances. This would be incredibly useful in allowing for cross-platform E2EE web apps that don't need to trust a server every time you use them. -[Google](https://chromeos.dev/en/web/isolated-web-apps) distinguishes between the drive by web, PWAs, and IWAs. The drive by web requires more conservative access to the system as the most accessible and therefore least trusted option. PWAs are a bit more trusted and so can integrate a bit more deeply into the system. IWAs are the most trusted and as such can have deeper access into the system and more powerful capabilities. +Google [distinguishes](https://chromeos.dev/en/web/isolated-web-apps) between the drive by web, PWAs, and IWAs. The drive by web requires more conservative access to the system as the most accessible and is therefore least trusted. PWAs are a bit more trusted and can integrate a bit more deeply into the system as a result. IWAs are the most trusted and, as such, can have deeper access into the system and more powerful capabilities.
![Diagram showing the drive by web, a PWA, then a dotted line separating them from IWAs](../assets/images/iwa-the-future-of-web-apps/iwa-diagram.png) From b82e77d44357977fa10c812f5a1e27841639e18e Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:17:52 -0600 Subject: [PATCH 32/34] wording Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 8cb1fd61..15e55c6b 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -34,7 +34,7 @@ Google [distinguishes](https://chromeos.dev/en/web/isolated-web-apps) between th
source: Google
-This higher security assurance from isolated and signed web applications and the inherently more trusted nature of a natively installed app will allow for IWAs to safely have access to APIs that it wouldn't be safe to allow normal websites to access, like [Direct Sockets](https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md). +This higher security assurance from isolated and signed web applications and the inherently more trusted nature of a natively installed app will allow for IWAs to safely access APIs which wouldn't be safe to allow normal websites to access, like [Direct Sockets](https://github.com/WICG/direct-sockets/blob/main/docs/explainer.md). IWAs use a totally new [URL scheme](https://github.com/WICG/isolated-web-apps/blob/main/Scheme.md) since they're not relying on HTTPS certificate authorities or DNS. They're totally isolated from each other and the web using enforced Content Security Policy and Cross-Origin Isolation, hence the name. From 408134fe33bc7d6e21c446fc0a611f8eab1e4c16 Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:18:17 -0600 Subject: [PATCH 33/34] wording Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index 15e55c6b..d75ad0b1 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -40,6 +40,6 @@ IWAs use a totally new [URL scheme](https://github.com/WICG/isolated-web-apps/bl ## Issues -The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. Martin has a nice in-depth [article](https://lowentropy.net/posts/bundles/) on bundling web content that's worth checking out on their website. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. +The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. Martin wrote a nice in-depth [article](https://lowentropy.net/posts/bundles) on bundling web content that's worth checking out on their website. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines and select development partners of Google. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. From 8472703b6673daeb83896cf5a6a87e14f2b4445f Mon Sep 17 00:00:00 2001 From: fria <138676274+friadev@users.noreply.github.com> Date: Tue, 26 Nov 2024 05:18:38 -0600 Subject: [PATCH 34/34] wording Co-authored-by: redoomed1 <161974310+redoomed1@users.noreply.github.com> Signed-off-by: fria <138676274+friadev@users.noreply.github.com> --- blog/posts/pwa-vs-iwa.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/blog/posts/pwa-vs-iwa.md b/blog/posts/pwa-vs-iwa.md index d75ad0b1..0f959268 100644 --- a/blog/posts/pwa-vs-iwa.md +++ b/blog/posts/pwa-vs-iwa.md @@ -42,4 +42,4 @@ IWAs use a totally new [URL scheme](https://github.com/WICG/isolated-web-apps/bl The [Worldwide Web Consortium](https://www.w3.org) currently has an open issue on their GitHub for IWAs with some interesting discussions that are worth checking out. There are some [criticisms](https://github.com/w3ctag/design-reviews/issues/842#issuecomment-1989631915) of IWAs, at least in their current form. A big point of contention is giving IWAs access to more powerful features like raw TCP and UDP socket access, similar to what a natively installed app might be able to do, which Martin Thomson at Mozilla argues is dangerous even with user consent. Martin wrote a nice in-depth [article](https://lowentropy.net/posts/bundles) on bundling web content that's worth checking out on their website. It'll be a long process of iterating on the design before a version of this idea that's secure and available across browsers. -Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines and select development partners of Google. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt will come along. I'll be watching with great interest either way. +Right now, Chrome ships the feature [enabled by default](https://chromestatus.com/feature/5146307550248960) but only on ChromeOS for admin-controlled machines and select development partners of Google. Safari and Firefox haven't implemented the feature, with [Firefox](https://github.com/mozilla/standards-positions/issues/799#issuecomment-2342084330) taking a stance against it. Perhaps in its trial run, the technology will prove its potential, or maybe IWAs aren't the best solution after all and another attempt at improving web apps will come along. I'll be watching with great interest either way.