OpenSource-Hub

ladybird

애플리케이션

LadybirdBrowser/ladybird

독립 웹 브라우저로, 새로운 엔진을 사용하고 Web 표준을 준수합니다.

개요

Ladybird는 Web 표준 기반의 새로운 엔진을 탑재한 진정으로 독립적인 웹 브라우저입니다. 멀티 프로세스 아키텍처를 채택하여 렌더링 프로세스가 샌드박스로 격리되고, 이미지 디코딩과 네트워크 요청이 모두 프로세스 외부에서 수행되며, SerenityOS의 LibWeb, LibJS 등의 컴포넌트를 계승합니다. 현재 프리 Alpha 단계에 있으며, Linux, macOS, Windows(WSL2) 등의 플랫폼을 지원합니다.

README 미리보기

# Ladybird\n\n[Ladybird](https://ladybird.org) is a truly independent web browser, using a novel engine based on web standards.\n\n> [!IMPORTANT]\n> Ladybird is in a pre-alpha state, and only suitable for use by developers\n>\n\n## Features\n\nWe aim to build a complete, usable browser for the modern web.\n\nLadybird uses a multi-process architecture with a main UI process, several WebContent renderer processes,\nan ImageDecoder process, and a RequestServer process.\n\nImage decoding and network connections are done out of process to be more robust against malicious content.\nEach tab has its own renderer process, which is sandboxed from the rest of the system.\n\nAt the moment, many core library support components are inherited from SerenityOS:\n\n- LibWeb: Web rendering engine\n- LibJS: JavaScript engine\n- LibWasm: WebAssembly implementation\n- LibCrypto/LibTLS: Cryptography primitives and Transport Layer Security\n- LibHTTP: HTTP/1.1 client\n- LibGfx: 2D Graphics Library, Image Decoding and Rendering\n- LibUnicode: Unicode and locale support\n- LibMedia: Audio and video playback\n- LibCore: Event loop, OS abstraction layer\n- LibIPC: Inter-process communication\n\n## How do I build and run this?\n\nSee [build instructions](Documentation/BuildInstructionsLadybird.md) for information on how to build Ladybird.\n\nLadybird runs on Linux, macOS, Windows (with WSL2), and many other \*Nixes.\n\n## How do I read the documentation?\n\nCode-related documentation can be found in the [documentation](Documentation/) folder.\n\n## Get in touch and participate!\n\nJoin [our Discord server](https://discord.gg/nvfjVJ4Svh) to participate in issue and development discussions.\n\nPlease read [Getting involved with Ladybird](Documentation/GettingStartedContributing.md) if you're new to Ladybird and want to help.\n\nBefore opening an issue, please see the [issue policy](CONTRIBUTING.md#issue-policy) and the [detailed issue-reporting guidelines](ISSUES.md).\n\nThe project participatio

FAQ (5)

문제 해결
Ladybird RequestServer가 시작 시 "database disk image is malformed" 오류로 충돌하는 문제를 해결하는 방법

HTTP 디스크 캐시 데이터베이스가 손상되었습니다. Ladybird를 종료한 후 캐시 디렉터리를 삭제하고 다시 시작하세요:

rm -rf ~/.cache/Ladybird

사용자 지정 캐시 위치를 설정한 경우에는 대신 $XDG_CACHE_HOME/Ladybird를 삭제하세요. Ladybird가 캐시를 자동으로 다시 생성합니다. ~/.config/Ladybird는 디스크 캐시가 아닌 설정을 저장하므로 삭제할 필요가 없습니다.

최신 빌드의 코드 수정으로 RequestServer가 충돌하는 대신 CacheIndex 초기화 오류가 전파되도록 변경되었지만, 손상된 캐시를 지우는 것이 여전히 즉각적인 해결 방법입니다.

원본 Issue #12057
문제 해결
Pi-hole 또는 사용자 지정 DNS 서버를 사용할 때 Ladybird에서 첫 페이지 로드 후 "Unable to resolve host"가 표시되는 이유는 무엇인가요?

이 문제는 Ladybird의 캐시에 만료된 DNS 주소 레코드가 남아 있어서 발생합니다. TTL이 매우 짧은 경우, 상위 CNAME 레코드가 아직 캐시에 남아 있는 동안 A/AAAA 레코드가 먼저 만료될 수 있으며, 이후 조회에서 CNAME을 따라가지만 사용 가능한 IP 주소를 찾지 못하게 됩니다. 이 문제의 수정 사항은 "Forget about fully expired RRs"라는 제목의 LibDNS/RequestServer 변경 사항입니다(issue #12215 수정). 해당 수정 사항이 포함된 빌드로 Ladybird를 업데이트하고 다시 빌드하세요. 예를 들어 git pull && ./Meta/ladybird.py run을 실행하면 됩니다. 임시 해결 방법으로, about:settings → Network로 이동하여 Custom DNS에서 시스템/기본 리졸버로 전환한 후 Ladybird를 다시 시작하세요.

원본 Issue #12215
문제 해결
Intl.NumberFormat.formatRangeToParts가 빈 배열을 받을 때 ICU.h:104에서 발생하는 Ladybird SIGILL을 수정하는 방법은?

이 크래시는 Intl.NumberFormat().formatRangeToParts(0, [])에 의해 발생합니다. Ladybird는 빈 배열을 ICU 십진수 변환에 전달하고, ICU는 U_DECIMAL_NUMBER_SYNTAX_ERROR를 반환하며, ICU.h:104의 verify_icu_success()가 JavaScript 수준의 완료를 생성하는 대신 SIGILL로 중단됩니다.

수정 방법: PR "LibUnicode+LibJS: Throw instead of aborting on Intl input ICU refuses."가 포함된 버전으로 Ladybird를 업데이트/다시 빌드하십시오. 이 패치는 유효하지 않은 ICU 입력으로 인해 네이티브 런타임이 크래시되는 것을 방지합니다.

영향을 받는 빌드에서의 우회 방법: Number([])가 0이므로, API를 호출하기 전에 두 끝점을 모두 JavaScript 숫자로 변환하십시오:

const nf = new Intl.NumberFormat();
nf.formatRangeToParts(Number(0), Number([]));

또는 래퍼를 사용하십시오:

function safeFormatRangeToParts(nf, start, end) {
    return nf.formatRangeToParts(Number(start), Number(end));
}

배열이나 다른 원시 타입이 아닌 끝점을 영향을 받는 Ladybird 버전에 직접 전달하지 마십시오.

원본 Issue #12308
문제 해결
DevTools 연결이 끊길 때 `VERIFY(m_devtools_client_count > 0)` 오류와 함께 Ladybird가 크래시되는 문제를 해결하는 방법은?

이 크래시는 DevTools 클라이언트 상태가 탭의 현재 페이지와 동기화가 어긋날 수 있기 때문에 발생하며, 특히 mail.google.com과 같은 페이지에 DevTools를 연결할 때 발생합니다. 이 문제는 DevTools 상태를 탭의 페이지와 동기화된 상태로 유지하는 LibWebView/LibWeb 변경 사항을 통해 수정되었습니다. 해당 수정 사항이 포함된 릴리스 또는 빌드로 Ladybird를 업그레이드하세요. Ladybird 1.0에서의 임시 해결 방법으로는, 영향을 받는 탭에 DevTools를 연결하거나 반복적으로 연결 해제하는 것을 피하고, 크래시 발생 후 Ladybird를 다시 시작하세요.

원본 Issue #12521
문제 해결
Ladybird에서 긴 YouTube 댓글에 "Read more" 버튼이 표시되지 않는 이유는 무엇인가요?

이 문제는 Ladybird의 이전 -webkit-line-clamp 구현 때문에 발생합니다. 클램프 처리된 콘텐츠가 스크롤 가능한 오버플로에 포함되지 않아 scrollHeight가 잘못되게도 clientHeight와 동일한 값을 반환했습니다. YouTube는 이러한 값을 사용하여 잘린 댓글을 감지하므로, 펼칠 내용이 없다고 판단하고 "더 보기" 버튼을 숨겼습니다. 콘솔에 표시되는 Battery Status API 오류는 이 문제와 무관합니다. 수정 사항은 Firefox처럼 숨겨진 클램프 콘텐츠를 레이아웃하고 측정하는 LibWeb 변경 사항인 "Keep clamped -webkit-line-clamp content in scrollable overflow"입니다. 해당 PR이 포함된 빌드로 Ladybird를 업데이트한 후 다시 빌드하세요. 임시 해결 방법으로는 Firefox 또는 다른 브라우저에서 동영상/댓글을 여세요.

원본 Issue #12199