Позавчера начался крутой замес на GitHub, и вчера продолжался весь день.
Есть такая очень популярная JS-библиотека Vue. Реально миллионы проектов в мире её юзают. У неё есть консольная утилита vue/cli, у которой несколько зависимостей. И автор одной из таких зависимостей встроил к себе в пакет код со скриншота.
Там с помощью кодирования по принципу Base64 скрыто намерение проверить IP-адрес пользователя, и, если он из России или Беларуси, то стереть все файлы у него на компьютере, заменив их содержимое на символ ❤️. Такой вот протест.
Сообщество довольно быстро это обнаружило. И — я редко видел такое единение душ — китайцы, американцы, турки, даже, кажется, один немец — куча иностранцев закидала этого разработчика ссаными тряпками (сам он из США). Все его попытки оправдаться заминусили, отправили жалобу в npm и оперативно удалили пакет, а самого автора обозначали не заслуживающим доверия.
Вообще, open-source разработка это коммунизм. И люди, которые ей занимаются, нередко придерживаются космополитических и до некоторой степени анархических взглядов. Среди них есть противники государств в целом, как способа организации общества, и у них очень хорошие (хотя и несколько наивные) аргументы на этот счёт. Ну и они совершенно точно умеют отделять действия властей от действий и решений обычных граждан. А ещё разработчики в основном довольно умные люди, с логикой и критическим мышлением. Почему-то никто из американцев не испугался, что у репозитория ухудшится репутация за отказ саботировать русских. Даже наоборот: они резко критиковали деструктивные по отношению к обычным пользователям действия и заканселили чувака, который эти действия предпринял. То есть делали совершенно не то, что делают корпорации и крупные руководители в тех же странах.
Представьте себе: обычные люди думают не так и хотят делать не то, что руководители. Кто бы мог подумать.
#dev
🚀 Вышел стабильный JavaScript движок от Google для Android
Новая стабильная библиотека Jetpack JavaScript Engine позволит разработчикам выполнять JS код в изолированной и ограниченной среде.
class MainActivity : ComponentActivity() {
// Теперь nullable, без lateinit
private var jsSandbox: JavaScriptSandbox? = null
private var jsIsolate: JavaScriptIsolate? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (!JavaScriptSandbox.isSupported()) {
Log.e("JS", "JavaScriptSandbox не поддерживается")
return
}
lifecycleScope.launch {
// Создаём и сохраняем в nullable-поле
jsSandbox = JavaScriptSandbox
.createConnectedInstanceAsync(applicationContext)
.await()
jsIsolate = jsSandbox?.createIsolate()
// При выполнении гарантируем, что jsIsolate != null
val result: String = jsIsolate
?.evaluateJavaScriptAsync(JS_SCRIPT_SCRING)
?.await()
?: "Ошибка: isolate не инициализирован"
Log.d("JS", "Результат выполнения: $result")
}
}
override fun onDestroy() {
super.onDestroy()
// Закрываем только если не null
jsIsolate?.close()
jsSandbox?.close()
}
}
#jetpack#js