並び順

ブックマーク数

期間指定

  • から
  • まで

1 - 40 件 / 85件

新着順 人気順

linux kernel panicの検索結果1 - 40 件 / 85件

  • Goで解放したメモリが少しずつ戻ってくる現象 - knqyf263's blog

    情報を発信する人のところに情報が集まることを日々実感しているので、Linuxのメモリ管理に特に詳しいわけではないのですが最近遭遇した問題について自分の理解を書いておきます。ざっと調べても同じことを書いている人を見つけられなかったので、公開には意義があると考えています。識者の方がフィードバックをくださると嬉しいです。 ※ AIの出力をベースに書いているのでいつもと少し文体が違います。 背景 要約 調査 再現の難しさ Goアプリケーションの調査 pprofによる分析 GCログの調査 Linuxの調査 Goランタイムの調査 GoのGCとTHP khugepagedの問題 Goランタイムにおける回避策 回避策の削除 max_ptes_noneのデフォルト値について MADV_NOHUGEPAGEをやめた理由 調査内容まとめ 解決策 検証 C言語 Go言語 まとめ 背景 Go言語で書かれたOSSのア

      Goで解放したメモリが少しずつ戻ってくる現象 - knqyf263's blog
    • 【2020年】CTF Web問題の攻撃手法まとめ - こんとろーるしーこんとろーるぶい

      はじめに 対象イベント 読み方、使い方 Remote Code Execution(RCE) 親ディレクトリ指定によるopen_basedirのバイパス PHP-FPMのTCPソケット接続によるopen_basedirとdisable_functionsのバイパス JavaのRuntime.execでシェルを実行 Cross-Site Scripting(XSS) nginx環境でHTTPステータスコードが操作できる場合にCSPヘッダーを無効化 GoogleのClosureLibraryサニタイザーのXSS脆弱性 WebのProxy機能を介したService Workerの登録 括弧を使わないXSS /記号を使用せずに遷移先URLを指定 SOME(Same Origin Method Execution)を利用してdocument.writeを順次実行 SQL Injection MySQ

        【2020年】CTF Web問題の攻撃手法まとめ - こんとろーるしーこんとろーるぶい
      • Linux でのハングタスクについて - 赤帽エンジニアブログ

        Red Hat でコンサルタントをしている菅原と申します。 この記事では、意外とあまり説明されていないような気がする Linux システムで発生するハングタスクについて少し説明したいと思います。現場のシステムでもハングタスク検知の設定がされていることが多いと思いますが、ハングタスクとは何なのかを正しくご理解いただくことで、ハングタスク検知を行う目的が明確になること、また、実際の障害事例もご紹介することで、通常あまりハングタスクと関連づけて考えないような設定でもハングタスク発生につながる場合があることを知っていただき、少しでもシステム管理や障害の理解、障害対応などのお役に立てれば幸いです。 なお、この記事では RHEL のみを対象に書いていますが、他の Linux ディストリビューションにも適用される内容と思います。 ハングタスク (hung tasks) とは ハングタスクとは読んで字のご

          Linux でのハングタスクについて - 赤帽エンジニアブログ
        • PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜 - Mirrativ Tech Blog

          こんにちは ハタ です。 Mirrativ では 2020年頃から サーバサイドの技術をPerlからGoへのシステム移行 を行っており、2024年現在でもサグラダファミリアのように移行作業は継続しています PerlとGoという2つの環境を同時に運用していますが、 基本的には 新機能は Go で実装 し、 Perlでは積極的に新規実装を行わない というスタイルで進めていました しかし、既存の機能の一部に手を加えたいとなった場合、まだまだ Perl の実装に手を加えることが一定あり、Perl から Go の機能を呼び出したいというニーズが出てきました (配信やギフトといったビジネスの根幹を支えるレガシーな実装においては顕著) そこで PerlXS を利用することで Perl から Go を直接呼び出せるようにできないかと考え検証を進めることにしました Goの -buildmode=c-shar

            PerlからGoへのシステム移行のアシスト 〜Perl XSとUnix Domain Socketを活用〜 - Mirrativ Tech Blog
          • Building a tiny Linux from scratch

            Last week, I built a tiny Linux system from scratch, and booted it on my laptop! Here’s what it looked like: Let me tell you how I got there. I wanted to learn more about how the Linux kernel works, and what’s involved in booting it. So I set myself the goal to cobble together the bare neccessities required to boot into a working shell. In the end, I had a tiny Linux system with a size of 2.5 MB,

              Building a tiny Linux from scratch
            • Rust concepts I wish I learned earlier

              This past month, I have been enthralled by the Rust programming language given its unique edge for writing memory-safe, modern programs. Over the years, several languages have emerged as the most preferred by engineers to write resilient, backend software. The tides have shifted from Java/C++ into Go and Rust, which combine decades of programming language theory to build tools that are effective i

                Rust concepts I wish I learned earlier
              • Go: A Documentary

                The historical release notes may helpful for general information: doc/go1release Go Release History doc/go1prerelease Pre-Go 1 Release History doc/go0release Weekly Release History (Before Go 1) Language Design General design/go0initial Rob Pike, Robert Griesemer, Ken Thompson. The Go Annotated Specification. Mar 3, 2008. design/go0spec0 The Go Programming Language. Language Specification. Mar 7,

                • 第674回 カーネルのクラッシュ情報を解析する | gihyo.jp

                  第673回の「カーネルのクラッシュ情報を取得する」では、カーネルクラッシュ時に情報を収集する仕組みを有効化しました。得られた情報は活用しないと意味がありません。今回はその中身を解析する方法を紹介します。 デバッグパッケージのインストール 第673回では、意図的にシステムをクラッシュさせることで、dmesgとvmcoreを取得しました。カーネルが今際の際に次につながる情報を残してくれたのです。「⁠しかしながらあのクラッシュが最後のpanicだとは思えない。もし、同じカーネルが続けて使われるとしたら、あのpanicの同類が、また世界のどこかへ現れてくるかもしれない……」 最初に行うべきなのは、前回紹介したように問題発生時のdmesgを読むことです。これである程度、状況の絞り込みは行えますし、運が良ければ原因がわかることもあります。しかしながら、dmesgだけだと「問題が起きた場所」はわかっても

                    第674回 カーネルのクラッシュ情報を解析する | gihyo.jp
                  • 第814回 1500円以下で買えるRaspberry Pi PicoサイズのRISC-VボードなMilk-V DuoでUbuntuを動かす | gihyo.jp

                    Ubuntu Weekly Recipe 第814回1500円以下で買えるRaspberry Pi PicoサイズのRISC-VボードなMilk-V DuoでUbuntuを動かす Ubuntu 24.04 LTSではRISC-Vボードのひとつである「Milk-V Mars」をサポートしました。これは中国のRISC-V製品のベンダーであるMilk-Vが作っているRaspberry Piライクなシングルボードコンピューターです[1]。ただしこのMarsはなかなか入手できない状況が続いています。Milk-Vでは他にも64コア搭載されたPCライクなPioneer、10GbEのネットワークスイッチとして使えるVegaなどもリリースしています。今回はRaspberry Pi Picoサイズの小さなボードで、比較的安価で入手性が高いMilk-V Duoシリーズに、Ubuntuをインストールしてみましょう

                      第814回 1500円以下で買えるRaspberry Pi PicoサイズのRISC-VボードなMilk-V DuoでUbuntuを動かす | gihyo.jp
                    • Proxmox VEを使った仮想環境をMINISFORUM NAB6に構築しESXiからVMを移行 - zaki work log

                      2023-08-11: RHEL系VMの起動エラーの対応について追記 新しく購入したMINISFORUM NAB6に自宅検証マシンとして仮想化プラットフォームのProxmox VEをセットアップしたのでその記録。 上に乗せてるのはサイズ比較用キーボードのキートップストラップ。 🤡 Proxmox Virtual Environment インストール ログイン apt設定 NAS設定(NFS) 内蔵ストレージ追加 VM作成おためし (RHEL9) ESXiからVMをインポート NetworkManager (Fedora) interfaces (Debian) netplan (Ubuntu) ドキュメント サイズ感(おまけ) 🤡 先日ふと見つけた小型PCが良さそうと思ったら、意外と周りでみんな購入してたみたいなので便乗して購入。 デバイスそのものはレビュー記事があるのでそちら参照。

                        Proxmox VEを使った仮想環境をMINISFORUM NAB6に構築しESXiからVMを移行 - zaki work log
                      • Linux Pipes are Slow - Quentin Santos

                        Errata: Some significant mistakes were pointed out to me by email by Brendan MacDonell. I have included errata, but the results might not be reliable, so take this with pinch of salt! vmsplice is too fast Some programs use a particular system call “vmsplice” to move data faster through a pipe. Francesco already did a deep dive on using vmsplice to make things fast. However, while experimenting wit

                        • redis threadedI/Oの検証 - MicroAd Developers Blog

                          はじめに マイクロアドでインフラエンジニアをしている柏木です。 マイクロアドでは広告配信に高速なKVSであるRedisを使用しています。 Redisはシングルスレッドでの高速性、安定性を売りにしていました。しかし6.0でマルチスレッド機能であるThreded I/Oが追加されました。 広告配信で多用している、Redisを高速化できるのであれば積極的に導入したいので検証を行いました。 はじめに Threded I/Oとは シングルスレッドでのRedisの処理 マルチスレッドでのRedisの処理 io-threads io-threads-do-reads + io-threads 検証環境 OSの追加設定 今回の検証結果 前提条件 指標の取得方法について loopbackアドレスを利用した検証 実行CPUの指定 Redisの起動コマンド Redisのconfigについて 暖機運転 検証1:I

                            redis threadedI/Oの検証 - MicroAd Developers Blog
                          • GitHub - V4bel/dirtyfrag

                            This document describes the Dirty Frag vulnerability class, first discovered and reported by Hyunwoo Kim (@v4bel), which can obtain root privileges on major Linux distributions by chaining the xfrm-ESP Page-Cache Write vulnerability and the RxRPC Page-Cache Write vulnerability. Dirty Frag is a case that extends the bug class to which Dirty Pipe and Copy Fail belong. Because it is a deterministic l

                              GitHub - V4bel/dirtyfrag
                            • Learning Async Rust With Entirely Too Many Web Servers

                              I've found that one of the best ways to understand a new concept is to start from the very beginning. Start from a place where it doesn't exist yet and recreate it yourself, learning in the process not just how it works, but why it was designed the way it was. This isn't a practical guide to async, but hopefully some of the background knowledge it covers will help you think about asynchronous prob

                                Learning Async Rust With Entirely Too Many Web Servers
                              • InferでLinuxカーネルのメモリ関連エラーを検出してみる - VA Linux エンジニアブログ

                                1. 静的コード解析 2. Infer 3. 調査環境 4. Inferのビルド 5. Inferで解析できるようにLinuxカーネルソースコードに少し修正を加える 6. LinuxカーネルソースコードをInferで検証 7. 解析結果に対する精査の一例 7.1. 真のバグの例 7.2. フォールスポジティブの例 7.3. 真のバグか判断に困るものの例 8. 結論とこれから 執筆者 : 岡部 究 1. 静的コード解析 普段の開発で品質向上させるためにどのような手法を採用されているでしょうか。おそらくユニットテストや結合テストを代表するテストを使っているのではないでしょうか。 このテスト手法は現実的ですがざっと挙げるだけでも以下の課題があります: 入力と出力をテストケースと呼ばれる例として与えるので全ての場合を網羅することは不可能 テストの網羅率を上げるにはユニットテストのような小さい単位で

                                  InferでLinuxカーネルのメモリ関連エラーを検出してみる - VA Linux エンジニアブログ
                                • No-Panic Rust: A Nice Technique for Systems Programming

                                  Can Rust replace C? This is a question that has been on my mind for many years, as I created and now am tech lead for upb, a C library for Protocol Buffers. There is an understandable push to bring memory safety to all parts of the software stack, and this would suggest a port of upb to Rust. While I love the premise of Rust, I have long been skeptical that a port of upb to Rust could preserve the

                                  • No More Blue Fridays

                                    Recent posts: 04 Aug 2025 » When to Hire a Computer Performance Engineering Team (2025) part 1 of 2 22 May 2025 » 3 Years of Extremely Remote Work 01 May 2025 » Doom GPU Flame Graphs 29 Oct 2024 » AI Flame Graphs 22 Jul 2024 » No More Blue Fridays 24 Mar 2024 » Linux Crisis Tools 17 Mar 2024 » The Return of the Frame Pointers 10 Mar 2024 » eBPF Documentary 28 Apr 2023 » eBPF Observability Tools Ar

                                    • How we found a bug in Go's arm64 compiler

                                      Every second, 84 million HTTP requests are hitting Cloudflare across our fleet of data centers in 330 cities. It means that even the rarest of bugs can show up frequently. In fact, it was our scale that recently led us to discover a bug in Go's arm64 compiler which causes a race condition in the generated code. This post breaks down how we first encountered the bug, investigated it, and ultimately

                                        How we found a bug in Go's arm64 compiler
                                      • めちゃくちゃ頑張って 22 年前の化石ルーターを令和最新ファームにした - Zopfcode

                                        本記事は "Kernel/VM 探検隊@東京 No18" で発表したプレゼンのブログ版です。 speakerdeck.com 本記事では電波法に基づく技術基準適合証明を受けた無線ルーターに自作のファームウェアをインストールする箇所がある。この状態で電波を放射した場合、技適が無効つまり違法となる可能性がある。本記事の全工程において電波の放射は一切行っていない。また、同様の遊びを嗜む場合は自己責任において行って欲しい。電波法を守って楽しいルーター改造ライフ! 購入 2024 年のある日、私はある古い無線ルーターを購入した。大昔に発売された、最初期の Linux 搭載無線ルーター WRT54GS である。無線ルーターの機能を増強できる代替ファームウェアとして有名な OpenWrt は、この機種の兄弟である WRT54G から生まれた。 「青いルーターで有名な WRT54G シリーズを手に入れて、

                                          めちゃくちゃ頑張って 22 年前の化石ルーターを令和最新ファームにした - Zopfcode
                                        • Go 1.21 Release Notes - The Go Programming Language

                                          Introduction to Go 1.21 The latest Go release, version 1.21, arrives six months after Go 1.20. Most of its changes are in the implementation of the toolchain, runtime, and libraries. As always, the release maintains the Go 1 promise of compatibility; in fact, Go 1.21 improves upon that promise. We expect almost all Go programs to continue to compile and run as before. Go 1.21 introduces a small ch

                                            Go 1.21 Release Notes - The Go Programming Language
                                          • Why is building a UI in Rust so hard?

                                            What Makes Rust Unique? Why is UI in Rust So Hard? Functional UI to the Rescue If you’ve read Hacker News recently, it’s hard to not think that Rust is the future: it’s being used in the Linux kernel and in the Android OS, by AWS for critical infrastructure, and in ChromeOS and Firefox. However, as wonderful as Rust is–it has yet to take off as a general language for building UI. In 2019, “GUI” wa

                                              Why is building a UI in Rust so hard?
                                            • Zig's New Async I/O

                                              In the Zig Roadmap 2026 stream Andrew announced a new way of doing I/O, let’s see what are the goals of this upcoming design and how that relates to the revival of async / await in Zig. The new I/O InterfaceThe most notable change to Zig is the introduction of a new interface in charge of all I/O operations. Most importantly, the Io interface is now expected to be provided by the caller, just like

                                                Zig's New Async I/O
                                              • 第673回 カーネルのクラッシュ情報を取得する | gihyo.jp

                                                Linuxカーネルも人類が生み出したものである以上、既知であれ未知であれなんらかの不具合を抱えています。そしてそれは「都合の悪い時」に限って顕在するものです。今回は「やたらとカーネルがフリーズする」不幸な星のもとに生まれた人に向けて、カーネルがクラッシュしたときのデバッグ方法を紹介しましょう。 カーネルだってつらいときはあるんです Linuxカーネルには「クラッシュダンプ」と呼ばれる仕組みが存在します。これはカーネルがどうしようもない自体に陥ったとき(=panicしたとき⁠)⁠、システムを再起動する前に障害収集用のシステムを起動し、現象発生直後のカーネルのメモリーをストレージに保存する機能です。これを使えば、panic時の原因を追求することが可能です[1]⁠。 UbuntuをはじめとするLinuxディストリビューションにとって、Linuxカーネルはまさに「縁の下の力持ち」と言える存在です。

                                                  第673回 カーネルのクラッシュ情報を取得する | gihyo.jp
                                                • Go 1.25 Release Notes - The Go Programming Language

                                                  Introduction to Go 1.25 The latest Go release, version 1.25, arrives in August 2025, six months after Go 1.24. Most of its changes are in the implementation of the toolchain, runtime, and libraries. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before. Changes to the language There are no languages changes tha

                                                    Go 1.25 Release Notes - The Go Programming Language
                                                  • Lies we tell ourselves to keep using Golang

                                                    👋 This page was last updated ~4 years ago. Just so you know. In the two years since I’ve posted I want off Mr Golang’s Wild Ride, it’s made the rounds time and time again, on Reddit, on Lobste.rs, on HackerNews, and elsewhere. And every time, it elicits the same responses: You talk about Windows: that’s not what Go is good at! (Also, who cares?) This is very one-sided: you’re not talking about th

                                                      Lies we tell ourselves to keep using Golang
                                                    • Rust: A Critical Retrospective « bunnie's blog

                                                      Since I was unable to travel for a couple of years during the pandemic, I decided to take my new-found time and really lean into Rust. After writing over 100k lines of Rust code, I think I am starting to get a feel for the language and like every cranky engineer I have developed opinions and because this is the Internet I’m going to share them. The reason I learned Rust was to flesh out parts of t

                                                      • Writing a Linux-compatible kernel in Rust

                                                        Writing a Linux-compatible kernel in RustMay 19, 2021 TL;DR: I'm writing a Linux clone in Rust just for fun. It does NOT aim to replace the Linux kernel. For the recent months, I've been working on a new operating system kernel Kerla, written from scratch in Rust which aims to be Linux-compatible at the ABI level. In other words, support running unmodified Linux binaries! I've already implemented

                                                          Writing a Linux-compatible kernel in Rust
                                                        • A Git story: Not so fun this time | Brachiosoft Blog

                                                          Linus Torvalds once wrote in a book that he created Linux just for fun, but it ended up sparking a revolution. Git, his second major creation, was also an accidental revolution. It’s now a standard tool for software engineers, but its origin story wasn’t so much fun this time, at least for Linus. Linus doesn’t scale 1998 was a big year for Linux. Major companies like Sun, IBM, and Oracle started g

                                                            A Git story: Not so fun this time | Brachiosoft Blog
                                                          • Booting Linux off of Google Drive

                                                            Competitiveness is a vice of mine. When I heard that a friend got Linux to boot off of NFS, I had to one-up her. I had to prove that I could create something harder, something better, faster, stronger. Like all good projects, this began with an Idea. My mind reached out and grabbed wispy tendrils from the æther, forcing the disparate concepts to coalesce. The Mass gained weight in my hands, and a

                                                              Booting Linux off of Google Drive
                                                            • How a simple Linux kernel memory corruption bug can lead to complete system compromise

                                                              In this case, reallocating the object as one of those three types didn't seem to me like a nice way forward (although it should be possible to exploit this somehow with some effort, e.g. by using count.counter to corrupt the buf field of seq_file). Also, some systems might be using the slab_nomerge kernel command line flag, which disables this merging behavior. Another approach that I didn't look

                                                              • Go 1.18 Release Notes - The Go Programming Language

                                                                Introduction to Go 1.18 The latest Go release, version 1.18, is a significant release, including changes to the language, implementation of the toolchain, runtime, and libraries. Go 1.18 arrives seven months after Go 1.17. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before. Changes to the language Generics G

                                                                  Go 1.18 Release Notes - The Go Programming Language
                                                                • "�[31m"?! ANSI Terminal security in 2023 and finding 10 CVEs

                                                                  This paper reflects work done in late 2022 and 2023 to audit for vulnerabilities in terminal emulators, with a focus on open source software. The results of this work were 10 CVEs against terminal emulators that could result in Remote Code Execution (RCE), in addition various other bugs and hardening opportunities were found. The exact context and severity of these vulnerabilities varied, but some

                                                                  • Proxmoxで自宅クラウド入門してみた

                                                                    はじめに こんにちは!千株式会社 システム開発部のkoinunopochi(社内:おかき)です。SEN Advent Calendar 2025の7日目になります! 昨日はN1206Kさんによる『「Tidy First?」で考える、“片付け”としての設計とリファクタリング』をお届けしました。 今日は新しいPCを買ったので自宅クラウドに入門してみた話になりますー! これなに? VMを立てまくって自宅クラウドみたいなことをしたい!の入門編。 特にやりたいこととしては、Giteaとかを立ててセルフホストの完全ローカル完結CI/CDを組んだりしたい。 ロマンしか求めていないので、実用性があるかと言われると微妙かもしれない。 セルフで色々遊べる環境があることがもう嬉しい。 Proxmoxのインストール ざっくりここを見ながら試した。 たぶん設定ミスってIPからしかアクセスできないが、一旦アクセスでき

                                                                      Proxmoxで自宅クラウド入門してみた
                                                                    • Go 1.19 Release Notes - The Go Programming Language

                                                                      Introduction to Go 1.19 The latest Go release, version 1.19, arrives five months after Go 1.18. Most of its changes are in the implementation of the toolchain, runtime, and libraries. As always, the release maintains the Go 1 promise of compatibility. We expect almost all Go programs to continue to compile and run as before. Changes to the language There is only one small change to the language, a

                                                                        Go 1.19 Release Notes - The Go Programming Language
                                                                      • 0.10.0 Release Notes ⚡ The Zig Programming Language

                                                                        Tier 4 Support § Support for these targets is entirely experimental. If this target is provided by LLVM, LLVM may have the target as an experimental target, which means that you need to use Zig-provided binaries for the target to be available, or build LLVM from source with special configure flags. zig targets will display the target if it is available. This target may be considered deprecated by

                                                                        • Exploring the internals of Linux v0.01

                                                                          Linux kernel is often mentioned as a overwhelmingly large open source software. As of this writing, the latest version is v6.5-rc5, which consists of 36M lines of code. Needless to say, Linux is a fruit of hard work of many contributors over the decades. However, the first version of Linux, v0.01 was pretty small. It consisted of only 10,239 lines of code. Excluding comments and blank lines, it wa

                                                                            Exploring the internals of Linux v0.01
                                                                          • oss-security - CVE-2021-33909: size_t-to-int vulnerability in Linux's filesystem layer

                                                                            Follow @Openwall on Twitter for new release announcements and other news [<prev] [next>] [thread-next>] [day] [month] [year] [list] Message-ID: <20210720123335.GA19170@localhost.localdomain> Date: Tue, 20 Jul 2021 12:36:11 +0000 From: Qualys Security Advisory <qsa@...lys.com> To: "oss-security@...ts.openwall.com" <oss-security@...ts.openwall.com> Subject: CVE-2021-33909: size_t-to-int vulnerabilit

                                                                            • Kubernetes And Kernel Panics

                                                                              How Netflix’s Container Platform Connects Linux Kernel Panics to Kubernetes Pods By Kyle Anderson With a recent effort to reduce customer (engineers, not end users) pain on our container platform Titus, I started investigating “orphaned” pods. There are pods that never got to finish and had to be garbage collected with no real satisfactory final status. Our Service job (think ReplicatSet) owners d

                                                                                Kubernetes And Kernel Panics
                                                                              • Go Conference 2021 Autumn CTF: Go 1.16.4 に含まれる脆弱性を突いてリバースプロキシを突破する - カンム テックブログ

                                                                                エンジニアの佐野です。Go Conference 2021 Autumn にて Kanmu はスポンサー枠をいただき、オフィスアワーの催しで Go x セキュリティというコンセプトの CTF のような問題を用意させていただきました。 問題はこちら "Go" beyond your proxy になります。 github.com The Go gopher was designed by Renee French. 当日解けなかった人やこのブログを読んで興味が沸いた人もチャレンジしてみてください。 問題を簡単に説明すると、 Go 1.16.4 で書かれたリバースプロキシの背後の HTTP サーバに flag.txt というファイルが置かれています。このファイルには簡単なアクセス制限が施されているのですが、それを突破してそのファイルの中身を参照して解答してください、というものになります。 Go

                                                                                  Go Conference 2021 Autumn CTF: Go 1.16.4 に含まれる脆弱性を突いてリバースプロキシを突破する - カンム テックブログ
                                                                                • Rewriting Rust

                                                                                  The Rust programming language feels like a first generation product. You know what I mean. Like the first iPhone - which was amazing by the way. They made an entire operating system around multitouch. A smart phone with no keyboard. And a working web browser. Within a few months, we all realised what the iPhone really wanted to be. Only, the first generation iphone wasn't quite there. It didn't ha